2013-10-28 23 views
6

次の問題があります。これは私の選択であるJava webdriver:要素が表示されない例外

org.openqa.selenium.ElementNotVisibleException: element not visible: Element is not currently visible and may not be manipulated 
    (Session info: chrome=30.0.1599.101) 

Select s = new Select(dropDown); 
s.selectByVisibleText("CHARGEBACK"); 

操作すること散歩があります私は選択をすると、私は次のエラーを取得するテストを実行するときに隠されているドロップダウンを持っています隠された要素?これは、htmlコードである

JavascriptExecutor jse = (JavascriptExecutor) driver; 
jse.executeScript("arguments[0].scrollIntoView(true);", element); 

<div class="ui-helper-hidden"> 
<select id="formLevel:levels_input" name="formLevel:levels_input"> 
<option value="541fac58-5ea8-44ef-9664-e7e48b6c6a3c">Seleccione un Registro</option> 
<option value="dafc799c-4d5e-4b02-a882-74cb6ad98902">SECURITY</option> 
<option value="e5416086-2036-4cd0-b23e-865747aa3f53">CALL CENTER</option> 
<option value="7ea4b4ea-4f06-4d27-9541-1b0cf3f2aa22">CHARGEBACK</option> 
<option value="0f915120-7b8f-4a33-b063-5d20a834b655">PREVENÇÃO A FRAUDE</option> 
<option value="a8ef13e8-f4a5-43b8-a668-b769f6988565">ANALISE DE CREDITO</option> 
<option value="83b65a26-d4cd-43d3-b3fa-2f7894ca454a">SUPORTE A CONTA</option> 
<option value="163d0db9-590c-47a7-a271-218b2d27d8d9">REGULARIZAÇÃO FINANCEIRA</option> 

そして、それはこのケースでは動作しません。私はポストの一つに次のコードを発見しました。どんな助けもありがとう。

+5

は、なぜあなたはそれ見え、例えばなり、有効なテストケースを作成しません'これをクリックし、要素が表示されたらドロップダウンを変更する'ユーザーがこれをしないので、隠し要素を操作するのは悪いテストロジックです。 – sircapsalot

+0

また、要素が表示され、このエラーがスローされた場合、セレクタをチェックします。間違った要素を選択している可能性があります。 –

+0

私は要素を見つけることができますが、オプションを選択することができないので、セレクタは問題ありません。 P.Sはhtmlコードを追加しました。 – elcharrua

答えて

7

この方法を試してみてください、それは隠された/見えない要素と対話することはできません。あなたの問題を解決するには、最初にdivをクリックする必要があると思います。ドロップダウンが表示され、ドロップダウンからオプションを選択します。私は実際のユーザーをシミュレートするので、純粋なJavascriptの方法とは対照的に、このようなアプローチをお勧めします。 triggerDropDown

+0

私はこの回答に同意します。 (DIVのクリックがすぐに期待される結果を持っているので)あなたはこの種の相互作用に(例外を無視して)FluentWaitを使用する必要はありませんので、WebDriverWaitは、この文脈で完璧です。 – djangofan

0

これはテストしていませんが、次の作業はありますか?

s.selectByValue( "7ea4b4ea-4f06-4d27-9541-1b0cf3f2aa22");

0

私は絶対にsircapsalotに同意します。アプリケーションビジネスロジックを保持し、「ユーザーが好き」とする必要があります。このハックを回避策としてのみ使用してください。

回答:

は、実際のユーザーをシミュレートするWebDriver試行以来

document.getElementById('formLevel:levels_input').options[3].selected = "true"

6

のHiのクラス名を更新

WebDriverWait wait = new WebDriverWait(driver, 300); 
WebElement triggerDropDown = driver.findElement(By 
       .className("ui-helper-hidden")); 
triggerDropDown.click(); 
WebElement selectElement = wait.until(ExpectedConditions 
        .visibilityOfElementLocated(By.id("formLevel:levels_input"))); 
Select select = new Select(selectElement); 
select.selectByVisibleText("SECURITY"); 

編集は、このために非常に多くの理由が存在することができ、シュート与えます。私はこの問題に直面し、さまざまな方法で解決しました。またのXPathの方法を使用して独自のxpath-を使用して

2-待つように明示的に知っているWebdriverWaitを使用して

1 - 。

3要素のサイズを取得し、最初の部分をクリックまたは実行します。

私は以前の回答が提起の理由と問題に加えて、ここでHow to Solve Element not visible Exception

0

をすべて解決策を文書化し、私が言及する価値が別の原因が発生しました。私の場合は、アクセスしたい要素が表示されるように、ページ上のJavaScriptをページのリンクをクリックして実行しなければなりませんでした。お使いのドライバーがJavaScriptを有効にしている限り、はOKです。私の場合、私はJavaScriptなしで走っていたので、リンクがプログラム上で「クリック」されていても要素が見えなくなっていました。私はHtmlUnitDriverをデフォルト設定で使用していました。最終的に私はChromeDriverに切り替えました。 (あなたはHtmlUnitDriverにはJavaScriptを有効にすることができますが、それは - 他の理由のために - 私の場合は私のために十分ではありませんでした。)

関連する問題