Подтвердить что ты не робот

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. Но не удалось найти точный синтаксис.

4b9b3361

Ответ 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();");