在做自动化测试,设计测试用例的时候,有时下一步的操作会依赖上一步的结果或者内容,上一步操作成功之后才能进行下一步操作等,这时候,我们就需要使用等待,来判断上一步操作是否完成,什么时候可以进行下一步操作。
否则,上一步操作如果花费的时间较长,还没有完成,就去进行下一步操作,这时就会产生无法定位到元素,元素状态不正确,数据校验结果不正确等异常。
例如在进行登录操作时,要等待登录页面加载成功,才能定位到用户名和密码输入框,然后填充用户名和密码,进行登录操作。
例如需要定位的元素在某个弹窗上,只有这个弹窗打开之后,才能定位到这个元素。
例如需要验证查询的结果,数据是否正确,就要等查询结束之后,再去定位所需要验证的数据等等。
Thread.sleep(X);
缺点:不能准确把握需要等待的时间(有时操作还未完成,等待就结束了,导致报错;有时操作已经完成了,但等待时间还没有到,浪费时间),如果在用例中大量使用,会浪费不必要的等待时间,影响测试用例的执行效率。
优点:使用简单,可以在调试时使用。
webDriver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
缺点:使用隐式等待,程序会一直等待整个页面加载完成,才会执行下一步操作;
但有时候页面想要的元素早已经加载完成了,但是因为网页上个别元素还没有加载完成,仍要等到页面全部完成才能执行下一步,使用也不是很灵活。
优点:隐性等待对整个driver的周期都起作用,所以只要设置一次即可。
WebDriverWait wait=new WebDriverWait(driver,10); //显示等待指定元素10秒
wait.until(ExpectedConditions.presenceOfAllElementsLocatedBy(By.xpath("//*[@id='dp']/div")));
缺点:使用相对比较复杂
优点:等待判断准确,不会浪费多余的等待时间,在用例中使用,可以提高执行效率。
摘自:https://blog.csdn.net/qq_39704682/article/details/85596644
titleIs( String title)
titleContains( String title)
urlToBe( String url)
urlContains( String fraction)
urlMatches( String regex)
presenceOfElementLocated( By locator)
presenceOfElementsLocated( By locator)
elementIfVisible(WebElement element)
presenceOfAllElementsLocatedBy( By locator)
visibilityOfElementLocated( By locator)
visibilityOfAllElementsLocatedBy( By locator)
visibilityOfAllElements(final List elements)
textToBePresentInElement( WebElement element, String text)
textToBePresentInElement(By locator, String text)
textToBePresentInElementLocated(final By locator, final String text)
textToBePresentInElementValue( WebElement element, String text)
textToBePresentInElementValue(final By locator, final String text)
frameToBeAvailableAndSwitchToIt(final String frameLocator)
frameToBeAvailableAndSwitchToIt(final By locator)
invisibilityOfElementLocated(final By locator)
invisibilityOfElementWithText(final By locator, final String text)
elementToBeClickable(final By locator)
elementToBeClickable(final WebElement element)
stalenessOf(final WebElement element)
refreshed(final ExpectedCondition condition)
elementToBeSelected(WebElement element)
elementSelectionStateToBe( WebElement element, boolean selected)
elementToBeSelected(By locator)
elementSelectionStateToBe(final By locator, final boolean selected)
alertIsPresent()