#java #maven #jenkins #selenium-webdriver
#java #мавен #дженкинс #selenium-веб-драйвер
Вопрос:
Когда я пытаюсь загрузить новый файл, используя Sendkeys в selenium с помощью Java, он работает локально, но если я запускаю тот же скрипт на сервере Jenkins, я получаю исключение как ‘org.openqa.selenium.InvalidArgumentException: недопустимый аргумент: файл не найден:’.
Ниже приведен фрагмент кода, который я написал, чтобы получить путь к файлу и передать путь к файлу с помощью sendkeys.
private void bulkUpload(String filePath, By locator) throws InterruptedException {
WebElement input = action.findWebElement(locator, "Upload");
JavascriptExecutor jsx = (JavascriptExecutor) action.getWebDriver();
jsx.executeScript("arguments[0].style.display = 'block';", input);
Thread.sleep(1000);
input.sendKeys(filePath);
}
Ответ №1:
Попробуйте использовать это решение ниже, у меня была такая же проблема, и я решил ее таким образом
* (если у вас есть исключение приведения класса на выходе, попробуйте получить веб-элемент внутри метода, который загружает файл)
WebElement element = driver.findElement(By.id("file-upload"));
LocalFileDetector detector = new LocalFileDetector();
String path =new File("src/test/resources/testdata/sampleDocument.docx").getAbsolutePath();
File file = detector.getLocalFile(path);
((RemoteWebElement) element).setFileDetector(detector);
element.sendKeys(file.getAbsolutePath());
Ответ №2:
vsreekanth попробуйте отправить абсолютный путь к файлу. Я использую его таким образом, и он работает локально и в Jenkins.
Надеюсь, это сработает для вас.
параметр path — это файл в ресурсах, например: "src/main/resources/files/sampleFile.txt"
public void uploadFile(WebElement input, String path) {
WebElement btnUpload = input.findElement(By.xpath(".."))
.findElement(By.xpath("..")).findElement(By.tagName("button"));
String script = "arguments[0].style.display = 'block';";
obtemJs().executeScript(script, input);
input.sendKeys(new File(path).getAbsolutePath());
}
Комментарии:
1. Вот что такое obtemJs ()? Каков импорт для решения этой проблемы.
2. Это просто метод получения JavascriptExecutor … public JavascriptExecutor obtemJs() { return (JavascriptExecutor) getWebDriver(); }