Загрузка Selenium с sendkeys не работает - так как перед загрузкой есть всплывающее окно - PullRequest
0 голосов
/ 20 июня 2019

У меня есть сценарий, в котором при загрузке файла на веб-странице, на котором есть кнопка обзора, и при нажатии этой кнопки просмотра появляется окно исследования окон.Я выбираю файл и нажимаю кнопку загрузки в окне.Теперь на веб-странице есть всплывающее окно с наложением для ввода имени загружаемого файла и нажатия кнопки сохранения.

Это невозможно автоматизировать, поскольку перед загрузкой имеется всплывающий экран с наложением.Ниже приведен код, который я использовал.

WebElement PDFUpload =driver.findElement(By.xpath("(//div[@class='upload-area'])[2]"));
PDFUpload.sendKeys("C:\\test\\Testuploads\\test.pdf");

Это нормально работает, когда нет оверлейного экрана после нажатия кнопки загрузки после выбора файла.Но когда оверлей для именования загруженного файла реализован на веб-странице, тест не запускается. Пробовал и с классом робота, но он все еще не работает (возможно, из-за того, что класс робота был указан неправильно).Но оставьте этот случай, потому что я не вижу, чтобы использование класса роботов было хорошей практикой для такого динамического веб-сайта, над которым я работаю.Кто-нибудь может помочь?

1 Ответ

0 голосов
/ 21 июня 2019

Этот метод предназначен для обработки диалога загрузки файлов Windows, который не может быть обработан с помощью Selenium.Выполните следующие действия:

  • Нажмите кнопку «Загрузить файл» / «Выбрать файл», чтобы открыть диалоговое окно «Загрузка файла».
driver.findElement(By.id("uploadbutton")).click;
  • Скопируйте абсолютный путь вашего файла в буфер обмена

StringSelection ss = new StringSelection ("D: /Test/Test1.docx");Toolkit.getDefaultToolkit (). GetSystemClipboard (). SetContents (ss, null);

  • Вставьте абсолютный путь к файлу в поле «Имя файла» диалогового окна «Загрузка файла»
//native key strokes for CTRL, V and ENTER keys
Robot robot = new Robot();

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);
robot.keyRelease(KeyEvent.VK_ENTER);
...