Selenium Webdriver - нажмите на скрытые элементы
Я пытаюсь автоматизировать загрузку файлов на Google Диске.
Элемент, используемый для передачи параметров, скрыт с высотой - 0px.
Ни один из действий пользователя не сделает этот элемент видимым. Поэтому мне нужна работа, чтобы щелкнуть элемент, пока она не видна.
<input type="file" style="height: 0px; visibility: hidden; position: absolute; width: 340px; font-size: inherit;" multiple=""/>
xpath для вышеуказанного элемента -
//*[@class='goog-menu goog-menu-vertical uploadmenu density-tiny']/input
Я использую
WebDriver.findElement(By.xpath(<xpath>).sendKeys(<uploadFile>)
Исключение -
org.openqa.selenium.ElementNotVisibleException
- Элемент не отображается в данный момент и поэтому не может взаимодействовать с ним.
Я попытался использовать JavascriptExecutor. Но не удалось найти точный синтаксис.
Ответы
Ответ 1
Попробуйте следующее:
WebElement elem = yourWebDriverInstance.findElement(By.xpath("//*[@class='goog-menu goog-menu-vertical uploadmenu density-tiny']/input"));
String js = "arguments[0].style.height='auto'; arguments[0].style.visibility='visible';";
((JavascriptExecutor) yourWebDriverInstance).executeScript(js, elem);
Вышеупомянутый пучок изменит видимость вашего контроля ввода файлов. Затем вы можете продолжить обычные действия для загрузки файлов, например:
elem.sendKeys("<LOCAL FILE PATH>");
Помните, что, изменяя видимость поля ввода, вы вмешиваетесь в тестируемое приложение. Инъекционные скрипты для изменения поведения навязчивы и не рекомендуются в тестах.
Ответ 2
Здесь простое решение,
WebElement tmpElement= driver.finElement(ElementLocator);
JavascriptExecutor executor = JavascriptExecutor)driver;
executor.executeScript("arguments[0].click();", tmpElement);
Ответ 3
Попробуйте этот пример кода:
JavascriptExecutor executor= (JavascriptExecutor)driver;
executor.executeScript("document.getElementById('ID').style.display='block';");
Select select = new Select(driver.findElement(By.id("ID")));
select.selectByVisibleText("value");
Thread.sleep(6000);
Используя java script исполнитель и сделайте элемент видимым, затем щелкните элемент через ID. Надеюсь, что это будет...
Ответ 4
Попробуйте следующее:
WebElement elem = yourWebDriverInstance.findElement(
By.cssSelector(".uploadmenu > input"));
String js =
"arguments[0].style.height='auto'; arguments[0].style.visibility='visible';";
((JavascriptExecutor) yourWebDriverInstance).executeScript(js, elem);
Здесь я заменил XPath на CSS Selector. Дайте мне знать. Работает ли вышеупомянутый скрипт или нет.
Ответ 5
Вы можете попробовать следующее:
((JavascriptExecutor)driver).executeScript("$('.goog-menu.uploadmenu > input').click();");