6

私は初めてSeleniumテストを行っています。ホームページでAJAXを呼び出し、要素のロードが完了するのをSeleniumに待機させたいと思います。動作するかどうかはわかりませんが、セレンと入力するだけで、waitForConditionを選択できます。

何を選択しても、常に「false」が返されます。waitForConditionが機能する場合でも、私は今はしませんか?

それが機能するかどうかをテストするにはどうすればよいですか?そして、私はこのコードで何が間違っているのですか?

 selenium.waitForCondition("//input[@name='Report'", "3000");
 selenium.waitForCondition("//*[@id='MyTable']", "3000");
 selenium.waitForCondition("css=.someClass2", "3000");

独自のクラスで実装すると、「true」が返されます

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

isElementPresent(By.xpath( "// * [@ id ='MyTable']"))-"true"を返します

4

6 に答える 6

3

waitForCondition要素が読み込まれるのを待つためではなく、Javascript 呼び出し専用です。

入っているものisElementPresentは大丈夫です。要素が実際に読み込まれて画面に表示されるタイミングをもう少し正確にするために、明示的な待機と組み合わせます。

http://seleniumhq.org/docs/04_webdriver_advanced.html

于 2012-11-27T16:48:08.533 に答える
2

C#

次のように実行できます。

まず、条件のタイムアウト値を設定できます。

その後、条件を使用できます。

var Wait = new WebDriverWait(GlobalDriver, TimeSpan.FromMinutes(1));
Wait.Until(ExpectedConditions.PresenceOfAllElementsLocatedBy(By.XPath("xPath"))));

また

Wait.Until(driver => driver.FindElement(By.XPath("xPath")));

それで全部です。

于 2016-11-22T15:00:20.257 に答える
1

あなたはこのようにすることができます:

selenium.waitForCondition("selenium.isElementPresent(\"//input[@name='Report']\")", "30000");

これは、要素がロードされるのを 30 秒待ちます。

于 2012-11-28T09:54:50.113 に答える
0

Aaran は、 Selenium WebDriver の待機に関する正しいドキュメントを紹介しました。

ExpectedConditions クラスについても書かれていることがわかります。これには、ExpectedConditions.presenceOfElementLocated である「is element present one」など、ExpectedCondition クラスのいくつかの役立つ実装が含まれています。

これを使用する例を次に示します。

WebDriver driver = new ChromeDriver();
driver.get("http://www.degraeve.com/reference/simple-ajax-example.php");

driver.findElement(By.name("word")).sendKeys("bird is the word");;
driver.findElement(By.cssSelector("input[type='button']")).click();
WebDriverWait driverWait = new WebDriverWait(driver, 10);
WebElement dynamicElement = driverWait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("#result p")));
System.out.println(dynamicElement.getText());

冗長すぎる場合は、リファクタリングして、要素ロケーターと Web ドライバーを受け取り、要素を返す関数を抽出しないのはなぜですか?

ExpectedCondition インスタンスを受け入れる DriverWait.until() は、述語関数を渡す方法のようなもので、クラスを介して行うか、ドキュメンテーションの例では匿名のネストされたクラスを使用します。Java では関数を送信できないためです。

渡す ExpectedCondition "関数" も値を返します。これは、何らかの要素 (または WebDriver からの他の値) の条件を待っている場合に役立ちます。

于 2012-11-27T19:43:24.380 に答える