6

Selenium WebDriverを数か月使用していますが、作業中のWebアプリ内のドロップダウンメニューに問題があります。

何が起こっているのかというと、テストはページを開き、ページ上のいくつかの要素を見つけてそれらが表示されていることを確認することです。その後、さまざまなフィールドにテキストが入力され、オプションの選択ボックスをクリックしてドロップダウンメニューを開きます。これに続いて、テストは必要なものが見つかるまでドロップダウンメニューのすべてのオプションを繰り返し、次にそのオプションをクリックします。

この時点でオプションが選択されていますが、ドロップダウンメニューは閉じていません。

オプション選択をもう一度クリックしようとしましたが、これは効果がありません。残りのテスト中に他のページに移動し、メニューが閉じません。

次に、ページが保存されてから移動します。ただし、ドロップダウンメニューは、ブラウザを閉じるまで残ります。

これはアプリからのコードです:

<select id="options" name="options" class="options">
<option value="option1 (auto)">option1 (auto)</option>
<option value="option2">option2</option>
<option value="option3">option3</option>
</select>
4

3 に答える 3

2

私が試みる最初の解決策は、さまざまな方法でメニューオプションをクリックすることです。Selenium APIは、この可能性を提供します。1)要素のcssセレクターなどを見つけます。

String cssOption1 = "select[id='options']>option[value='option1 (auto)']";
String cssOption2 = "select[id='options']>option[value='option2']";
String cssOption3 = "select[id='options']>option[value='option3']";

また、要素が正しく見つかったことを確認することを忘れないでください。たとえば、.in firepath、firebug addon in ffox: ファイアパスのWeb要素上の適切な場所

アプローチ1

driver.findElement(By.cssSelector(cssOption2)).click();

アクションビルダーAPIを使用したアプローチ2

WebElement mnuOptionElement;
mnuOptionElement = driver.findElement(By.cssSelector(cssOption2));
Actions builder = new Actions(driver);
// Move cursor to the Main Menu Element
builder.moveToElement(mnuOptionElement).click();

ここで入手できるアクションビルダーの詳細

jsExecutorを使用してWeb要素をクリックするアプローチ3。すべての状況で常に私のために働きます。

JavascriptExecutor js = (JavascriptExecutor) driver;
        StringBuilder stringBuilder = new StringBuilder();
        stringBuilder.append("var x = $(\'"+cssOption2+"\');");
        stringBuilder.append("x.click();");
        js.executeScript(stringBuilder.toString());

これがあなたのために働くことを願っています

于 2012-10-08T16:25:15.090 に答える
2

これが私がうまくいくことがわかった唯一の方法であるため、回避策で問題を解決しました。

まず、eugene.polschikovの回答に感謝しますが、問題は解決しませんでしたが、少し目が覚めました。アクションビルダーの知識がなく、将来のテストについていくつかの素晴らしいアイデアを得ることができました。また、これを読んで、考えられる解決策について考えてくれた人にも感謝します。

現在実施されている回避策は、選択が開かれないことです。コードが機能する方法は、リストを開いて目的のリストを見つけてクリックすることです。この時点では選択は閉じないため、コードは最初に選択を開かなくなり、クリックします。それを選択するための隠されたオプション、私が望んでいたものの100%ではありませんが、それは機能します。

ハッピープログラミング、ベン。

于 2012-10-10T08:09:13.627 に答える
2

人間がEscapeを押してコンボボックスを終了できる場合は、アクティブな要素に切り替えることでSeleniumでそれを行うことができます。

    from selenium.webdriver.common.keys import Keys 
    element = driver.switch_to.active_element
    element.send_keys(Keys.ESCAPE)    
于 2017-12-19T23:29:38.943 に答える