为什么这个Selenium C#代码不会等到元素被加载?!
_fireFoxWebDriver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(1000));
我选择使用Thread.Sleep(5000);
它都没有!有人可以向我解释这个!
答案 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));