有没有办法避免在硒中使用等待和睡眠?

时间:2016-03-22 15:59:11

标签: javascript selenium selenium-webdriver wait sleep

有没有办法避免使用driver.wait or driver.sleep命令?

driver.manage().timeouts().implicitlyWait(3000)这样的东西在元素定位之前用作一般超时?

我是自动测试和编码的新手:)

3 个答案:

答案 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);