【问题标题】:WebDriverWait or ImplicitlyWait or ExplictlyWait nothing worksWebDriverWait 或 ImplicitlyWait 或 ExplicitlyWait 没有任何作用
【发布时间】:2012-10-19 03:35:53
【问题描述】:

我正在使用 Selenium 2 测试(用 C# 编写)从“选择”控件中选择值。选择会导致回发到服务器,从而更新页面的状态。因此,我在选择一个值以等待页面更改后执行手动等待 (thread.sleep)。它适用于 Thread.Sleep。但是,@ 987654322@ 是一个坏主意,有很多充分的理由使用,所以当我拿出我所有的@ 987654323@ 代码行时,我所有的测试用例都崩溃了,我尝试了 WebDriverWait,隐式和显式都没有工作,非常沮丧

下面是我尝试过的示例代码......

//WebDriverWait

 public IWebElement WaitForElement(By by)
 {
            // Tell webdriver to wait
            WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(30));
            wait.PollingInterval = TimeSpan.FromSeconds(2);
            wait.IgnoreExceptionTypes(typeof(NoSuchElementException), typeof(NoSuchFrameException));
            wait.IgnoreExceptionTypes(typeof(StaleElementReferenceException), typeof(StaleElementReferenceException));

            IWebElement myWait = wait.Until(x => x.FindElement(by));
            return myWait;
}

也试过了:

   WebDriverWait wait = new WebDriverWait(new SystemClock(), driver, TimeSpan.FromSeconds(30), TimeSpan.FromMilliseconds(100));

//隐式:

driver.Manage().Timeouts().ImplicitlyWait(new TimeSpan(0, 0, 30));

//显式等待:

IWebDriver driver = new FirefoxDriver();
driver.Url = "http://somedomain/url_that_delays_loading";
WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(30));
IWebElement myDynamicElement = wait.Until<IWebElement>((d) =>
    {
        return d.FindElement(By.Id("someDynamicElement"));
    });

【问题讨论】:

    标签: webdriver selenium-webdriver


    【解决方案1】:

    这对我有用->

    WebDriverWait wait = new WebDriverWait(browser, new TimeSpan(0, 0, 30));
    
    element = wait.Until<IWebElement>((driver) =>
      {
         return driver.FindElement(By.Name("name_of_element")));
      });
    

    你也可以通过ID来做->

    WebDriverWait wait = new WebDriverWait(browser, new TimeSpan(0, 0, 30));
    
    element = wait.Until<IWebElement>((driver) =>
      {
         return driver.FindElement(By.Id("id_of_element")));
      });
    

    如果不查看更多代码,就很难确定它为什么不起作用。

    【讨论】:

    • 告诉我你还想要什么代码,我可以粘贴它,让我试试
    【解决方案2】:

    尝试使用

    new WebDriverWait(driver, 30).until(ExpectedConditions.presenseOfElementLocated(byLocator));
    

    【讨论】:

      【解决方案3】:

      我找到了一个使用 stackoverflow 的解决方案 :) 这很有效:

      click on partialLinkText("Exit")
      remote.manage().timeouts().implicitlyWait(50, TimeUnit.SECONDS)
      remote.manage().timeouts().implicitlyWait(0, TimeUnit.SECONDS)
      // Thread.sleep(7000) // for js-work
      (new WebDriverWait(remote, 245)).until(presenceOfElementLocated(By.partialLinkText("""Entry for > technician""")))
      // Thread.sleep(3000) // for js-works
      

      【讨论】:

        猜你喜欢
        • 2013-07-23
        • 2021-06-06
        • 2020-03-02
        • 1970-01-01
        • 2021-04-03
        • 2014-10-18
        • 2019-01-04
        • 2019-10-08
        • 1970-01-01
        相关资源
        最近更新 更多