2016-10-04 6 views
0

JScriptのコマンドを実行した後、私は次のメソッドを実行し、動的メニューのをクリックしようとしているハング:セレンは

public void clicaItemSubMenu(String item) throws InterruptedException{ 
    String link = driver.findElement(By.xpath("//*[contains(text(), '" + item + "')]")).getAttribute("Id"); 
    driver.get("javascript:document.getElementById('" + link + "').click()"); 
} 

コードがうまく動作し、メニューが開いていると、その後、Seleniumは、FirefoxでハングまたはInternet Explorer。私はコードをデバッグする場合、問題は発生しません。私はいくつかの待っているものに対処しようとしましたが、成功はありません。誰も助けることができますか?

+0

この行の目的は何ですか:driver.get( "javascript:document.getElementById( '" + link + "').click()"); 任意のページに移動しますか?次に、最後に()をクリックしますか? –

+0

この行は、必要なメニュー項目をクリックします。私はデフォルトのclick()メソッドを試しましたが、これらの特殊なケースでは機能しませんでした。今、この行で毎回実行がフリーズします。 – Brito

答えて

0

実際にはWebDriver::get()は、現在のブラウザウィンドウに新しいWebページを読み込むために使用されます。これはHTTPGET操作を使用して実行され、JavaScriptを使用して要素をクリックしながらロードが完了するまでブロックされます。

あなたは以下のように、現在選択されたフレームまたはウィンドウのコンテキストでJavaScriptを実行JavascriptExecutor::executeScript()使用してみてください: -

public void clicaItemSubMenu(String item) throws InterruptedException{ 
    WebElement link = driver.findElement(By.xpath("//*[contains(text(), '" + item + "')]")); 
    ((JavascriptExecutor)driver).executeScript("arguments[0].click()", link); 
} 

: - あなたが直接せずにlink.click()としてWebElement::click()方法を使用してWebElementをクリックするとJavascriptExecutorを使用してください。

+1

うわー!これはうまくいった! link.click()はほとんどの場合は機能しますが、この場合は機能しません。助けてくれてありがとう – Brito

+0

Ops、申し訳ありませんが、修正済みとマークされています。 Im prety新しいスタック:) – Brito