4

JavaでSeleniumFirefoxDriverを使用してテストユニットを開発しています。ページの読み込みの処理についてサポートが必要です。私の問題は、タイムアウトが発生している間に要素を待機することです。pageLoadTimeout私はすでに適用を試みimplicitlyWaitましたが、成功しませんでしたが、一部のメソッドはページ全体が読み込まれるのを待ち続けます。私のコードのプレビュー:

    (...)
    FirefoxDriver driver= new FirefoxDriver(firefoxProfile);
    driver.manage().timeouts().pageLoadTimeout(1, TimeUnit.MILLISECONDS);
    driver.manage().timeouts().implicitlyWait(1, TimeUnit.MILLISECONDS);
    try {
       driver.get("http://mysite");
    } catch (org.openqa.selenium.TimeoutException e) {
       //after 1 milisecond get method timeouts
    }
    for (int i = 0; i < 5; i++) {//5 seconds wait
            if (driver.findElements(By.id("wait_id")).size() == 0) { //findElements cause java to wait for full load
                debug("not found");//never happens because 'if' condition waits for full load
                driver.wait(1000);
            } else {
                debug("found");
                break;
            }
        }

前もって感謝します。

4

3 に答える 3

1

この方法は、 「不安定なロード戦略」pageLoadTimeout()で実行されたFirefoxでのみ正しく機能します。したがって、次のように実行します。FirefoxDriver

FirefoxProfile fp = new FirefoxProfile();
fp.setPreference("webdriver.load.strategy", "unstable");
WebDriver driver = new FirefoxDriver(fp);

これはFirefoxでのみ機能し、実際には不安定であり、他のテストの一部が失敗する可能性があることに注意してください。注意して使用してください。

于 2012-06-12T00:58:07.653 に答える
1
public static WebElement waitForElement(WebDriver driver, By by) {

    WebElement element = null;
    int counter = 0;
    while (element == null) {
        try {
            Thread.sleep(500);
            element = driver.findElement(by);
        } catch (Exception e) {
            e.printStackTrace();
        }
        if (counter > 119) {
            System.out.println("System has timed out");
        }
                    counter++;
    }
    return element;
于 2013-01-21T19:55:43.380 に答える
0

driver.getはブロッキング呼び出しであり、ページがロードされるのを待ちます。タイムアウトを1ミリ秒に設定したため、タイムアウト例外がスローされます。e.printStackTrace();あなたがあなたのorg.openqa.selenium.TimeoutExceptioncachtブロックに入れるならば、あなたはそれを見ることができます。

タイムアウトを-1に設定します。

于 2012-06-11T07:42:04.213 に答える