有没有办法避免使用driver.wait or driver.sleep
命令?
像driver.manage().timeouts().implicitlyWait(3000)
这样的东西在元素定位之前用作一般超时?
我是自动测试和编码的新手:)
答案 0 :(得分:2)
您可以在Selenium中设置显式和隐式等待。
显式等待的示例,即明确等待特定元素出现:
IWebDriver driver = new FirefoxDriver();
driver.Url = "http://somedomain/url_that_delays_loading";
WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10));
IWebElement myDynamicElement = wait.Until<IWebElement>((d) =>
{
return d.FindElement(By.Id("someDynamicElement"));
});
隐式等待(即等待任意时间)的一个例子是:
WebDriver driver = new FirefoxDriver();
driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(10));
driver.Url = "http://somedomain/url_that_delays_loading";
IWebElement myDynamicElement = driver.FindElement(By.Id("someDynamicElement"));
有关详细信息,请参阅here。
答案 1 :(得分:0)
您可以使用显式等待
new WebDriverWait(driver, new TimeSpan(0, 1, 0)).Until(ExpectedConditions.ElementIsVisible(By locator));
等待元素一分钟。
答案 2 :(得分:0)
非常感谢您的回答。我设法用以下方式“绕道而行”:
function findClickElem(locator, path, timeout) {
driver.wait(generalspecs.getSpecs().until.elementLocated(generalspecs.getSpecs().By[locator](path)), timeout).then(function(elem){
if(elem){
elem.click();
}else{
console.log('no element!');
}
});
}
刚添加到generalspecs并在每次使用wait时调用并单击该元素。
findClickElem("xpath" ,"//li[contains(@class, 'classCustom1')]", 15000);