Всем привет! В автоматизации я новичек. Задача следующая: есть кнопка по нажатию на которую появляется стандартный виндовый диалог выбора файла (к примеру фото). Вопрос : как это реализовать средствами WebDriver, возможно нужно испльзовать сторонние библиотеки ? просьба поделиться опытом.
Всё просто.
Находишь элемент <input type="file">, и заполняешь его путём до файла element.send_keys '/Users/username/filename.ext'.
Для наглядности сделал тему в Базе знаний Загрузка файла через WebDriver.
Пробуйте просто через sendKeys загрузить файл. Если не получается, значит у вас какие-то особенности веб-приложения о которых нужно знать более подробно, чтобы помочь.
Сразу же кидаю темы, в которых похожее обсуждалось:
FAILED: testSetProfilePositiv
java.lang.NullPointerException
at com.exigen.shegula.ds_pages.EditProfilePage.uploadPhoto(EditProfilePage.java:65)
at com.exigen.shegula.tests.DSTestProfile.testSetProfilePositiv(DSTestProfile.java:51)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:84)
at org.testng.internal.Invoker.invokeMethod(Invoker.java:714)
at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:901)
at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1231)
at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
at org.testng.TestRunner.privateRun(TestRunner.java:767)
at org.testng.TestRunner.run(TestRunner.java:617)
at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:329)
at org.testng.SuiteRunner.privateRun(SuiteRunner.java:291)
at org.testng.SuiteRunner.run(SuiteRunner.java:240)
at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)
at org.testng.TestNG.runSuitesSequentially(TestNG.java:1224)
at org.testng.TestNG.runSuitesLocally(TestNG.java:1149)
at org.testng.TestNG.run(TestNG.java:1057)
at org.testng.remote.RemoteTestNG.run(RemoteTestNG.java:111)
at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:204)
at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:175)
Странное решение. То есть была иерархия классов страниц, с вынесением общих методов в родительские классы, всё как по канонам ООП. А ты убрал наследование и теперь для каждой страницы будешь реализовывать общую логику?
В таких случаях принято оставлять driver приватным полем родителя, но при этом в родителе добавлять метод
Всем привет!
У меня возникла следующая проблема:
На странице есть две кнопки: add files и upload files, но вторая - невидимая, пока фалы не добавлены в окошко, т.е я не могу по ней кликнуть пока не выберу в виндоус окне файл и не нажму open.
WebElement element = driver.findElement(By.xpath("//input[@type='file']"));
element.sendKeys("src/main/resources/testJPG.jpeg");
startUpload.click();
т.е путь к файлу отправляется, но по сути ничего не происходит. на интерфейсе все это выглядит: Screenshot by Lightshot
Может, есть у кого идеи, как это можно решить?
Спасибо!
Ты бы лучше сразу постил сюда html код своего элемента, который неактивен.
Но есть такое вот дело Элемент считается невидимым, если для него выполняется хотя бы одно из перечисленных условий:
значение свойства display равно none;
значение свойства visibility равно hidden;
значение свойства opacity равно 0 (кроме операции клика);
значение атрибута type равно hidden (если это input);
offsetWidth и offsetHeight равны нулю.
У меня была похожая пролема для моб. сайтов
перед тем как обращаюсь к элементу и он становится видимым, и фотка норм загружается
так же пробывал роботом работать с окном файл аплодера, но у меня он чего то не захотел ничего делать, с браузером норм отрабатывал, а вот с аплодером беда (
Но можешь попробывать, вдруг пойдет
StringSelection ss = new StringSelection("Путь к файлу");
Toolkit.getDefaultToolkit().getSystemClipboard().setContents(ss, null);
driver.findElement(By.xpath("//input[@type='file']")).click();
Robot robot = new Robot();
// Ctrl-V + Enter on Win
robot.delay(3000);
robot.keyPress(KeyEvent.VK_CONTROL);
robot.keyPress(KeyEvent.VK_V);
robot.keyRelease(KeyEvent.VK_V);
robot.keyRelease(KeyEvent.VK_CONTROL);
robot.keyPress(KeyEvent.VK_ENTER);
всем привет! Пожалуйста подскажите, можно ли загрузить файл если тесты запускаются на удаленном сервере а не локадьно(если да, то интересует какой будет путь к файлу) проект лежит на репозитории в битбакет, тесты запускаются на
jenkins
апну тему.
на питоне + силениум сделал программу для загрузки фото на сайт. открывается виндовое окно для выбора фото. отправляю путь. картинка загружается.
запускаю ту же программу через jenkins не работает. программа просто доходит до конца и при встроенной проверке сменилась ли фотография выдает, что ничего не изменилось.
Начнем с простого: как вы взаимодействуете с нативным окном загрузки файлов? Где физически запускается тест? Ответ - на Jenkins - заведомо неверный. И если это так, то вам следует для начала почитать зачем нужны CI сервера, и попытаться проанализировать, подходят ли они для работы с браузерами в рамках высокоуровневого тестирования.