5

こんにちは、ドロップダウンフィールドに値が指定されていることを確認する必要がありますが、それらの値が選択されていないため、ドロップダウンボックスに表示されません。要素の次のXpathがあります

//table[contains(@id,'Field')]//tr[td//span[text()='Code']]/preceding-sibling::*[1]/td//select[contains(@id,'GSRCH_FLT')]/option[text()='not=']

これは、ブラウザで要素を適切に識別しています。しかし、次のwebdriverメソッドを使用して確認しているとき

driver.findElement(By.xpath("//table[contains(@id,'Field')]//tr[td//span[text()='Code']]/preceding-sibling::*[1]/td//select[contains(@id,'GSRCH_FLT')]/option[text()='not=']")).isDisplayed();

ボックスに表示されないため、false が返されます。

これの代替案を教えてください。

4

4 に答える 4

8

あなたがしたい:

private boolean isElementPresent(WebDriver driver, By by){
    return driver.findElements(by).count != 0;
}

findElements()findElement()要素が存在しない場合は待機しないため、これには適しています。暗黙の待機をオンにして実行している場合はfindElement()、要素の検索がタイムアウトし (キャッチしている例外です)、しばらく時間がかかります。

于 2012-12-18T12:02:04.133 に答える
4

WebDriver には という関数がないことがわかりましたisElementPresent()。これは、Selenium-1.0 で使用されていた重要な関数の 1 つです。これを WebDriver に実装するには、以下に示すようにメソッドを記述するだけです。その後、この関数を任意のタイプBy(By.id、BY.name など) で使用できます。

private boolean isElementPresent(WebDriver driver, By by){
  try{
    driver.findElement(by);
    return true;
  }catch(NoSuchElementException e){
    return false;
  }
}

この関数を呼び出す方法の例を次に示します。

if (isElementPresent(by.id("btnSubmit")) {
   // preform some actions
}

上記の関数は、要素がページで見つかった場合は true を返し、そうでない場合は false を返します。

于 2012-12-17T07:08:48.753 に答える
0

要素がページで使用可能かどうかを確認するには、 isDisplayed()を使用します。

于 2013-07-06T03:12:07.193 に答える
0
    internal static bool IsElementPresent(IWebDriver driver, By by, int timeoutSeconds=10)
    {

        for (int second = 0; second< timeoutSeconds ; second++)
        {
            try
            {
                driver.FindElement(by);
            }
            catch (NoSuchElementException e)
            {
                Thread.Sleep(1000);
                continue;
            }

            return true;
        }

        return false;

    }
于 2013-01-19T02:16:22.927 に答える