gpt4 book ai didi

WebDriverWait 或 ImplicitlyWait 或 ExplictlyWait 不起作用

转载 作者:行者123 更新时间:2023-12-04 12:55:24 26 4
gpt4 key购买 nike

我正在使用从“选择”控件中选择值的 Selenium 2 测试(用 C# 编写)。选择会导致回发到服务器,从而更新页面的状态。因此,在选择等待页面更改的值后,我正在执行手动等待( thread.sleep )。它适用于 Thread.Sleep。然而,Thread.Sleep有很多好的理由使用是一个坏主意,所以当我取出我所有的 Thread.Sleep 时一行代码然后我所有的测试用例都崩溃了,我尝试了 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"));
});

最佳答案

这对我有用->

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

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

关于WebDriverWait 或 ImplicitlyWait 或 ExplictlyWait 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12967008/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com