【问题标题】:how to give wait to driver.get() explicitly in selenium using java如何使用 java 在 selenium 中显式地等待 driver.get()
【发布时间】:2012-05-11 15:25:41
【问题描述】:

如何等待 driver.get(),因为我们使用 .get() 访问的 URL 是不知道的。并且可能需要未知的时间,所以我们必须给 diver.get() 30 秒超时然后如何给它。

下面是它的代码..

package org.openqa.selenium.example;

import java.util.List;

import org.openqa.selenium.By

import org.openqa.selenium.WebDriver;

import org.openqa.selenium.WebElement;

import org.openqa.selenium.firefox.FirefoxDriver;


public class MyClass{

    public static void main(String[] args) throws Exception {

        // The Firefox driver supports javascript 

        WebDriver driver = new HtmlUnitDriver();

        // Go to the some websites

        driver.get("http://www.abced.com/123456/asd.htm");

        /***  Here we DONT get back the driver, so we need to Give Time out of 30 seconds**/

        final List<WebElement> element1= driver.findElements(By.tagName("a"));

    for (WebElement webElement : element1) {

        String urlFromPage = webElement.getAttribute("href");

                System.out.println(urlFromPage);

        }


     }

}

我试过了

driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
driver.get(thisPage.url);

它不工作.. 请建议, 交易

【问题讨论】:

    标签: java selenium webdriver


    【解决方案1】:

    如果您想等待页面加载,您应该改用pageLoadTimeout(long time, java.util.concurrent.TimeUnit unit) 方法。 implicitlyWait(long time, java.util.concurrent.TimeUnit unit) 用于等待尚未出现的元素,而不是等待页面加载。

    在您的 WebDriver 实例上,您应该调用与 implicitlyWait() 使用的方法链类似的方法链。这将按顺序调用:

    • manage() - 驱动管理界面
    • options() - 驱动选项界面
    • timeouts() - 超时选项接口
    • pageLoadTimeout(...) - 将超时设置为您想要的时间

    你可以找到相关的javadochere

    【讨论】:

    • 感谢您的快速回复。我不知道如何使用它。所以请你告诉我,如何将 pageLoadTimeout() 与驱动程序一起使用。我使用的是 selenium 16.0
    • 编辑了更多细节。如果您需要更多帮助,请编辑您的问题以更清楚地说明您要做什么。
    • 我尝试了同样的方法,但是当我执行程序时,我得到了异常:" java.lang.UnsupportedOperationException: pageLoadTimeout SO,我无法处理这个..
    • 您是否从源头追溯到引发异常的位置?
    • 是的,当我们要设置 pageLoadTimeout() 时
    【解决方案2】:

    相反,您可以使用 WebDriverWait 来指定要检查的条件和最大超时时间。这可以按如下方式使用:

    WebDriverWait _wait = new WebDriverWait(driver, new TimeSpan(0, 0, 2)); //waits 2 secs max
    _wait.Until(d => d.FindElement(By.Id("name")));
    

    我已经对this问题发布了类似的答案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-23
      • 2021-12-18
      • 2012-05-11
      • 2018-01-24
      • 1970-01-01
      • 2021-12-31
      相关资源
      最近更新 更多