簡體   English   中英

請建議 selenium+java 的等待功能

[英]Please suggest a wait function for selenium+java

我正在自動化一個應用程序,顯式等待不起作用。

我的要求是等待特定元素,直到它被加載/可見或可點擊以執行下一步操作。

我顯式地嘗試了所有預期的條件,但它失敗了。 只有睡眠在起作用。

我注意到的一件事是,Web 瀏覽器未加載,但頁面正在加載,因此顯式功能不起作用。

有人可以幫助我嗎?

請參考附件

由於您的問題相當籠統,我現在只能提供一般性的答案。 您可以等到整個頁面加載完畢后再繼續測試。 (我建議這樣做,因為您聲稱在進行測試時瀏覽器似乎沒有完全准備好)

這可以使用以下代碼完成:

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"))

*此代碼不是我的,它來自
在 Selenium 中等待頁面加載

Explicit WaitWebDriverWait已被證明和高效,並且它與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();

當 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;
    };

selenium 有三種等待。

  • 隱式等待
  • 顯式等待
  • 流暢的等待

隱式等待

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM