请为selenium + java建议等待函数

时间:2018-03-06 06:50:34

标签: java selenium automation

我正在自动化应用程序,显式等待无效。

我的要求是等待特定元素,直到它被加载/可见或可点击以执行下一步操作。

我在显式方面尝试了所有预期的条件,但它失败了。只有睡觉才有效。

我注意到的一件事是,网页浏览器没有加载但页面正在加载,因此显式功能无效。

有人可以帮助我吗?

请找到附件

4 个答案:

答案 0 :(得分:0)

由于您的问题相当普遍,我现在只能提供一般答案。您可以等到整个页面都已加载,然后再继续测试。 (我建议这样做,因为您声称在进行测试时浏览器似乎没有完全准备好的问题)

可以使用以下代码完成:

IWait<IWebDriver> wait = new OpenQA.Selenium.Support.UI.WebDriverWait(driver, TimeSpan.FromSeconds(30.00));
wait.Until(driver1 => ((IJavaScriptExecutor)driver).ExecuteScript("return document.readyState").Equals("complete"))

*此代码不是我的源代码 Wait for page load in Selenium

答案 1 :(得分:0)

明确等待,即WebDriverWait已被证明&amp;效率很高,与ExpectedConditions一起使用非常完美。

由于您的要求是等待某个特定元素,直到它被加载/可见或可点击以执行下一个操作,您可以使用下面的代码块:

WebDriver driver = new FirefoxDriver();
driver.get("http://somedomain/url_that_delays_loading");
WebElement myDynamicElement = (new WebDriverWait(driver, 10)).until(ExpectedConditions.elementToBeClickable(By.id("myDynamicElement")));
myDynamicElement.click();

答案 2 :(得分:0)

当web元素比平时花费更多时间加载时,就会出现这种类型的问题。在这种情况下,我们在给定的时间间隔内使用了轮询机制,即fluentWait。以下是有用的代码。

public WebElement fluentWait(final By locator) {
        Wait<WebDriver> wait = new FluentWait<WebDriver>(driver)
                .withTimeout(10, TimeUnit.SECONDS)
                .pollingEvery(1, TimeUnit.SECONDS)
                .ignoring(NoSuchElementException.class);

        WebElement foo = wait.until(new Function<WebDriver, WebElement>() {
            public WebElement apply(WebDriver _driver) {
                return driver.findElement(locator);
            }
        });
        return  foo;
    };

答案 3 :(得分:0)

硒中有三种等待类型。

  • 隐式等待
  • 明确等待
  • 流利等待

隐含等待

driver.manage()。timeouts()。implicitlyWait(TimeOut,TimeUnit.SECONDS);

明确等待

WebDriverWait wait = new WebDriverWait(WebDriver,TimeOut);

流利等待

Wait wait = new FluentWait(WebDriver reference).withTimeout(timeout, SECONDS).pollingEvery(timeout, SECONDS).ignoring(Exception.class);

更多信息如何使用所有等待示例请转到以下URL。

https://trickyautomationworld.blogspot.in/2018/02/implicit-wait-vs-explicit-wait-vs.html