24

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

4

5 に答える 5

24

これを試して:

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

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

于 2012-09-11T06:50:01.247 に答える
14

簡単な解決策:

WebElement tmpElement = driver.finElement(ElementLocator);
JavascriptExecutor executor = (JavascriptExecutor)driver;
executor.executeScript("arguments[0].click();", tmpElement);
于 2014-05-28T02:53:42.693 に答える
2

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

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スクリプトエグゼキューターを使用して要素を表示し、IDから要素をクリックします。それが役立つことを願っています..

于 2014-01-31T08:57:00.930 に答える
1

これを試して:

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 セレクターに置き換えました。上記のスクリプトが機能しているかどうか教えてください。

于 2014-04-09T09:47:36.253 に答える