如何在使用Java访问Selenium WebDriver中的另一个页面之前等待页面?

时间:2013-08-22 10:04:17

标签: java eclipse selenium selenium-webdriver

我是Selenium的新人。我正在使用Selenium WebDriver和Java。我正在使用eclipse作为IDE。我已经为Login页面编写了一些代码并且运行成功。现在我想在成功登录后转到所需的页面,但是我希望在转换另一页之前等待一段时间。如何在加载另一页之前等待页面?

5 个答案:

答案 0 :(得分:12)

据我所知,有三种方式:

  1. 隐含等待:(适用于页面上的所有元素)

    driver.manage().timeouts().implicitlyWait(A_GIVEN_NUMBER, TimeUnit.SECONDS);

  2. 显式等待:(适用于特定元素)

    WebDriverWait.until(CONDITION_THAT_FINDS_AN_ELEMENT);

  3. 更具体的代码如下:

    WebDriverWait wait = new WebDriverWait(driver, 40);
    WebElement element = wait.until(ExpectedConditions.elementToBeClickable(By.id("someid")));
    
    1. 使用线程:

      Thread.sleep(NUMBER_OF_MILLIS);

答案 1 :(得分:4)

我真的建议不要使用Thread.sleep(NUMBER_OF_MILLS)。它会不稳定,你会在睡眠时间不够的时候出现。

如果您只是在等待加载DOM,那么触发页面加载的WebDriver事件将始终等待DOM加载,然后再返回控件。

但是,如果AJAX用于在DOM之后更改HTML,那么我建议您使用WebDriverWait,并等到已知事件发生(例如,对象出现在html,文本更改等)。

如果你从这篇文章中拿走一件事,请停止使用Sleep!

答案 2 :(得分:1)

使用课程WebDriverWait

Selenium explicit / implicit wait

您可以等到下一页上您期望的元素出现。 :

WebDriver _driver = new WebDriver();
WebDriverWait _wait = new WebDriverWait(_driver, TimeSpan(0, 1, 0));

_wait.Until(d => d.FindElement(By.Id("Id_Your_UIElement"));

答案 3 :(得分:0)

尝试使用implicitlyWait持续60秒。如下的Selenium WebDriver:

driver.manage().timeouts().implicitlyWait(60, TimeUnit.SECONDS);//wait for 60 sec.

如果您需要等待更多,请将其设为80,90等。

对于Selenium RC,您可以使用以下代码:

selenium.waitForPageToLoad("60000");//wait for 60 sec.

可以使用Thread完成,如下所示:

Thread.sleep(NUMBER_OF_MILLIS);

对于WebDriver中的显式等待,在加载页面中标识一个元素并编写如下代码:

WebDriverWait wait = new WebDriverWait(driver, 40);//wait for 40 sec.
WebElement element = wait.until(ExpectedConditions.elementToBeClickable(By.id("someid")));

答案 4 :(得分:0)

我使用过这种方法。尝试找出页面上哪个元素是最后加载的。通过使用isDisplayed获取该元素的定位器并检查它是否存在,您将能够看到整个页面何时加载