2012-09-11 79 views
15

Googleドライブでファイルのアップロード機能を自動化しようとしています。Selenium Webdriver - 非表示の要素をクリック

パラメータを渡すために使用される要素は、高さ - 0pxで非表示になっています。

この要素を表示させるユーザー操作はありません。だから私はそれが表示されていない間、要素をクリックするために回避策が必要です。

<input type="file" style="height: 0px; visibility: hidden; position: absolute; width: 340px; font-size: inherit;" multiple=""/> 

上記要素のxpathがある -

org.openqa.selenium.ElementNotVisibleException 
  • Eleme -

    //*[@class='goog-menu goog-menu-vertical uploadmenu density-tiny']/input 
    

    私は

    WebDriver.findElement(By.xpath(<xpath>).sendKeys(<uploadFile>) 
    

    例外を使用していますntは現在表示されていないため、対話できません。

私はJavascriptExecutorを試してみました。しかし、正確な構文を見つけることができません。上記の束は、あなたのファイルの入力コントロールの可視性を変更します

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

+0

は、HTMLを見てみましょう、Googleドライブはただの形式ですか?その場合は、Seleniumを使用しないでください。指定したデータを含むフォームを送信するスクリプトを作成してください。 – jasop

答えて

18

はこれを試してみてください。

elem.sendKeys("<LOCAL FILE PATH>"); 

はあなたがテスト中のアプリケーションでおせっかいされた入力フィールドの可視性を変更することで、注意してください:あなたは、次にようにアップロードしたファイルのための通常の手順に進むことができます。振る舞いを変更するためにスクリプトを注入することは邪魔になり、テストでは推奨されません。 IDによって要素をクリックし、次にJavaスクリプトエグゼキュータを使用することにより

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

と要素が見えるよう:

+0

完璧に動作します! – praneel

2

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

0

はこれを試してみてください...それはheplsホープ:

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

私はCSSセレクタでXPathを交換しました。上記のスクリプトが動作しているかどうかを教えてください。

0

あなたは、次の試してみることができます。

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

簡単な解決策はここに行くと、

WebElement tmpElement= driver.finElement(ElementLocator); 
JavascriptExecutor executor = JavascriptExecutor)driver; 
executor.executeScript("arguments[0].click();", tmpElement); 
関連する問題