Попытка загрузки файла с помощью .sendKeys () будет работать только при использовании в сочетании с <input type=file>
(https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/file).
При просмотре кода вы пытаетесь отправить информацию о файлек элементу <span>
.
Вместо этого попробуйте:
WebDriverWait wait = new WebDriverWait(driver, 15, 100);
WebElement uploadFileElement = wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("file")));
uploadFileElement.sendKeys("E:\\Hatha.jpg");
Это подождет, пока элемент <input type="file">
станет видимым, затем отправит файл с помощью sendKeys ().Это не сработает, если <input type="file">
никогда не станет видимым, в этом случае вы можете обойти проблему, сделав ее видимой с помощью JavaScript, но это будет взломом и не будет отражать действия конечного пользователя.
* РЕДАКТИРОВАТЬ *
Если вы решите пойти по пути взлома JavaScript, вы можете сделать следующее:
WebDriverWait wait = new WebDriverWait(driver, 15, 100);
WebElement uploadFileElement = wait.until(ExpectedConditions.presenceOfElementLocated(By.id("file")));
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("arguments[0].style.visibility='visible'", uploadFileElement);
uploadFileElement.sendKeys("E:\\Hatha.jpg");
Обратите внимание, что ожидаемое условиетеперь ждет, пока элемент будет существовать в DOM, а не ждет, пока он станет видимым, затем мы используем JavaScript, чтобы явно сделать элемент видимым, прежде чем использовать sendKeys () для взаимодействия с ним.
Возможно, вам не нужнобрось свой дiver объект для JavascriptExecutor.Если у вас есть экземпляр RemoteWebDriver, ChromeDriver или FirefoxDriver, а не экземпляр WebDriver, метод уже доступен.
* РЕДАКТИРОВАТЬ 2 *
Просмотр этого сновареальная проблема в том, что элемент <input type="file">
был сдвинут с левой стороны экрана.Исправление, следовательно, является разновидностью вышеупомянутого.Вместо того, чтобы заставить элемент быть видимым, мы можем вместо этого использовать JavaScript, чтобы смещение было 0 вместо -9999px:
WebDriverWait wait = new WebDriverWait(driver, 15, 100);
WebElement uploadFileElement = wait.until(ExpectedConditions.presenceOfElementLocated(By.id("file")));
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("arguments[0].style.left='0'", uploadFileElement);
uploadFileElement.sendKeys("E:\\Hatha.jpg");