Кнопка загрузки фото не работает в Selenium Webdriver - PullRequest
0 голосов
/ 24 мая 2018

Кнопка загрузки фото не работает в Selenium Webdriver

То, что я уже устал

driver.findElement(uploadPhotoBtn).sendKeys("E:\\photo.png");

Также пробовал функцию Robot

    driver.findElement(uploadPhotoBtn).click();
    StringSelection ss = new StringSelection(logoPath);
    Toolkit.getDefaultToolkit().getSystemClipboard().setContents(ss, null);
    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);

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

HTML источник страницы:

> <div ng-show="!status.uploading" ng-class="{ '!isMobile':
> 'mewe-type-1' }" class="uploader-able !isMobile"><!-- ngIf: isMobile
> --><!-- ngIf: !isMobile --><button ng-if="!isMobile" class="btn-action radius ng-scope">Upload Photo</button><!-- end ngIf: !isMobile
> --><input capture="camera" accept="image/*" name="image" type="file" fileread="fileread" file="file" class="ng-isolate-scope"></div>

Журнал консоли:

org.openqa.selenium.WebDriverException: неизвестная ошибка: Элемент ... недоступен для щелчка в точке (314, 477).Другой элемент получит щелчок: (Информация о сеансе: chrome = 66.0.3359.181) (Информация о драйвере: chromedriver = 2.35.528161

Ответы [ 5 ]

0 голосов
/ 24 мая 2018

Это пример того, как добавить файл в кнопку загрузки, не совсем понятно, каков путь к кнопке, но вы должны найти элемент с элементом <input type="file"> и взаимодействовать с ним:

WebElement uploadPhotoBtn = driver.find(By...); //type="file" 

File file = new File(path);
uploadPhotoBtn.sendKeys(file.getAbsolutePath());

... и вот как получить источник, если у вас есть какой-то предварительный просмотр

elementPreview.findElement(By.tagName("img")).getAttribute("src");

Надеюсь, это поможет,

0 голосов
/ 24 мая 2018

В соответствии с ошибкой, которую вы получаете, попробуйте устранить ее одним из следующих способов, заменив событие щелчка:

Actions act = new Actions(wd);
act.moveToElement("Your Webelement").click().perform();

ИЛИ вы можете работать с функциональностью JavaScript,

JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("arguments[0].click();", "Your Webelement");
0 голосов
/ 24 мая 2018

Вам необходимо ' ввести ' вашего файла в элемент ввода.Выше указанная команда отправки ключей не совсем верна.

Код, который вы можете попробовать:

driver.findElement(By.xpath("//input[@name="image"]")).sendKeys("Image Path Here") ;
0 голосов
/ 24 мая 2018

Мой ответ был раскритикован на одном SO посте @ JimEvans , который является основным участником Selenium фреймворка веб-автоматизации .Я чему-то научился у него.Это то, что он должен был сказать о кнопке загрузки с помощью <input type="file">.

Если вы пытаетесь загрузить файл, и на рассматриваемой странице используются стандартные механизмы загрузки, предоставляемые HTML, вы можете сделать это напрямую с помощьюСам селен.Стандартный механизм HTML с элементом <input type="file">.Найдя этот элемент для загрузки файла на странице, вы можете использовать element.sendKeys("full/path/and/file/name/here");.Это описано в шаге 10 алгоритма для команды Element Send Keys спецификации W3C WebDriver и используется в нескольких тестах загрузки файлов в тестовом коде проекта Selenium пример .

0 голосов
/ 24 мая 2018

Пара вещей:

1) Ошибка "Element is not clickable" означает, что кнопка загрузки как-то закрыта.Это может быть отключено, за какой-то обложкой, или мой любимый, вся страница ясно div.Убедитесь, что кнопка, которую вы пытаетесь нажать, действительно доступна для нажатия ...

2) Чтобы .sendKeys() работал, вам нужно указать на элемент <input type="file">.Основываясь на имени переменной, вы вместо этого пытаетесь указать на элемент <button>.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...