web-dev-qa-db-ja.com

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を使用してみました。しかし、正確な構文を見つけることができません。

20
praneel

これを試して:

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>"); 

入力フィールドの可視性を変更することで、テスト対象のアプリケーションに干渉していることに注意してください。動作を変更するためのスクリプトの挿入は煩わしいため、テストでは推奨されません。

21
Ashwin Prabhu

簡単なソリューション:

WebElement tmpElement = driver.finElement(ElementLocator);
JavascriptExecutor executor = (JavascriptExecutor)driver;
executor.executeScript("arguments[0].click();", tmpElement);
11
Karthikeyan

このサンプルコードを試してください。

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 executorを使用して要素を表示し、IDを介して要素をクリックします。

2
Amirdha

以下を試してみることができます:

((JavascriptExecutor)driver).executeScript("$('.goog-menu.uploadmenu > input').click();");
1
Amith