隐式不起作用,但线程睡眠确实有效

时间:2017-11-30 18:05:08

标签: c# selenium

我的睡眠代码效果很好但是当我把代码隐含起来时它并没有。

作品

driver.Navigate().GoToUrl(http://bit.ly);
driver.FindElement(By.XPath("//*[@id='shorten_url']")).SendKeys("http://google.com");
Thread.Sleep(1500);
driver.FindElement(By.XPath("//*[@id='shorten_actions']")).Click();

outL.Text += driver.FindElement(By.XPath(//*[@id='shorten_actions']//input[@class='copy-input'])).GetAttribute("value") + "\r\n";

不能工作

driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(100);
driver.Navigate().GoToUrl("http://bit.ly");
driver.FindElement(By.XPath("//*[@id='shorten_url']")).SendKeys("http://google.com");

driver.FindElement(By.XPath("//*[@id='shorten_actions']")).Click();

outL.Text += driver.FindElement(By.XPath(//*[@id='shorten_actions']//input[@class='copy-input'])).GetAttribute("value") + "\r\n";

有人能解释我为什么吗?

1 个答案:

答案 0 :(得分:2)

您应该考虑使用不同的方法,而不是依赖于驱动程序的隐式等待:

var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10));
wait.Until(ExpectedConditions.VisibilityOfAllElementsLocatedBy(by));

您可以将其包装在方法

public static IWebElement FindElement(IWebDriver driver, By by, int timeoutInSeconds)
{
    if (timeoutInSeconds > 0)
    {
        var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(timeoutInSeconds));
        return wait.Until(drv => drv.FindElement(by));
    }
    return driver.FindElement(by);
}

希望这有帮助