testng如何实现等待
答案:1 悬赏:50 手机版
解决时间 2021-04-26 17:36
- 提问者网友:那叫心脏的地方装的都是你
- 2021-04-26 14:14
testng如何实现等待
最佳答案
- 五星知识达人网友:街头电车
- 2021-04-26 15:30
Selenium的延迟等待分为 显式等待(Explicit Wait) & 隐式等待(Implicit Wait).
1.显式等待
显式等待,就是明确的要等到某个元素的出现或者是某个元素的可点击等条件,等不到,就一直等,除非在规定的时间之内都没找到,那么就跳出Exception.
如:
new WebDriverWait(driver, 15).until(
ExpectedConditions.presenceOfElementLocated(By.cssSelector("css locator"))
);
这里,15是要等待的秒数.如果没有满足until()方法中的条件,就会始终在这里wait 15秒,依然找不到,就抛出异常.
也可以这样写:
WebDriver driver = new FirefoxDriver();
driver.get( http://somedomain/url_that_delays_loading);WebElement e = (new WebDriverWait( driver, 10)) .until( new ExpectedCondition< WebElement>(){ @Override
public WebElement apply( WebDriver d) { return d.findElement( By.id("id locator"));
}
}
);
这样就通过回调函数,直接获得了这个WebElement.也就是页面元素.
如果只是仅仅想判断页面是不是加载到某个地方了,就可以用第一种方法; 但如果需要得到某个WebElement,两种方式都可以,只是第一种方式还需要再多一步获取的操作.
Wait w = new Wait(){ @Override
public boolean until() { return webElement.isDisplayed();
}
};
另外这种等待的方式,在加载js代码的时候做判断会比较方便,反正我只在代码里这么见过,但是没用过,有兴趣的朋友可以研究一下.
2.隐式等待
隐式等待,我觉得就是不靠谱的等待,看一段代码就明白了.
driver.manage().timeouts().implicitlyWait(second, TimeUnit.SECONDS);
WebDriver会进行一个隐式等待,但参数只有时间,这就导致我需要什么元素出现,我不一定能等到它,只是让driver延迟一段时间再继续而已. 不过我们也可以把它小小的封装一下,变废为宝:
public boolean isByElementDisplayed(By by, int time) { boolean status = false; if (driver.findElement(by).isDisplayed() == false) {
driver.manage().timeouts().implicitlyWait(time, TimeUnit.SECONDS);
} else {
status = true;
} return status;
}
得不到某个元素,我们就延迟一下...
最后还有一个最低效的做法:
Thread.sleep()
额,不建议使用.
1.显式等待
显式等待,就是明确的要等到某个元素的出现或者是某个元素的可点击等条件,等不到,就一直等,除非在规定的时间之内都没找到,那么就跳出Exception.
如:
new WebDriverWait(driver, 15).until(
ExpectedConditions.presenceOfElementLocated(By.cssSelector("css locator"))
);
这里,15是要等待的秒数.如果没有满足until()方法中的条件,就会始终在这里wait 15秒,依然找不到,就抛出异常.
也可以这样写:
WebDriver driver = new FirefoxDriver();
driver.get( http://somedomain/url_that_delays_loading);WebElement e = (new WebDriverWait( driver, 10)) .until( new ExpectedCondition< WebElement>(){ @Override
public WebElement apply( WebDriver d) { return d.findElement( By.id("id locator"));
}
}
);
这样就通过回调函数,直接获得了这个WebElement.也就是页面元素.
如果只是仅仅想判断页面是不是加载到某个地方了,就可以用第一种方法; 但如果需要得到某个WebElement,两种方式都可以,只是第一种方式还需要再多一步获取的操作.
Wait w = new Wait(){ @Override
public boolean until() { return webElement.isDisplayed();
}
};
另外这种等待的方式,在加载js代码的时候做判断会比较方便,反正我只在代码里这么见过,但是没用过,有兴趣的朋友可以研究一下.
2.隐式等待
隐式等待,我觉得就是不靠谱的等待,看一段代码就明白了.
driver.manage().timeouts().implicitlyWait(second, TimeUnit.SECONDS);
WebDriver会进行一个隐式等待,但参数只有时间,这就导致我需要什么元素出现,我不一定能等到它,只是让driver延迟一段时间再继续而已. 不过我们也可以把它小小的封装一下,变废为宝:
public boolean isByElementDisplayed(By by, int time) { boolean status = false; if (driver.findElement(by).isDisplayed() == false) {
driver.manage().timeouts().implicitlyWait(time, TimeUnit.SECONDS);
} else {
status = true;
} return status;
}
得不到某个元素,我们就延迟一下...
最后还有一个最低效的做法:
Thread.sleep()
额,不建议使用.
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯