Selenium等待/睡眠命令

时间:2016-05-11 18:24:01

标签: c# selenium-webdriver

为什么这个Selenium C#代码不会等到元素被加载?!

_fireFoxWebDriver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(1000));

我选择使用Thread.Sleep(5000); 它都没有!有人可以向我解释这个!

2 个答案:

答案 0 :(得分:4)

如果使用Thread.Sleep(5000),测试将仅等待5秒钟并返回执行。如果您需要等待元素不存在或不可见时,您应该使用WebDriverWait。例如:

var timeout = 10000; // in milliseconds
var wait = new WebDriverWait(Driver, TimeSpan.FromMilliseconds(timeout));
wait.Until(ExpectedConditions.ElementIsVisible(By.CssSelector("your-selector")));

此外,如果您需要等待页面加载,您可以使用代码:

var timeout = 10000; // in milliseconds
var wait = new WebDriverWait(Driver, TimeSpan.FromMilliseconds(timeout));
wait.Until(d => ((IJavaScriptExecutor)d).ExecuteScript("return document.readyState").Equals("complete"));

在这两种情况下,10秒是查找元素的限制时间。如果此时没有找到任何一个元素,则测试不会通过。否则,如果在5秒内找到一个元素,则代码不会等待所有剩余的秒数,它将继续到下一个代码行。

这种等待我们很有用,因为你不需要等待所有的限制时间来找到一个元素,只有必要。

答案 1 :(得分:0)

有时如果我们想要等到元素应该是可点击的意思,我们可以使用以下WebDriverWait方法:wait.until(ExpectedConditions.elementToBeClickable(element))

例如:

 WebElement ele=driver.findElements(By.xpath("your xpath"));
 WebDriverWait wait =new WebDriverWait(driver, 50); 
wait.until(ExpectedConditions.elementToBeClickable(ele));