APP自动化之三大等待(四)

硬性等待

Thread.sleep(long millis); 

实例:

Thread.sleep(1000); 1秒

优点:使用简单

缺点:容易造成时间浪费

隐式等待

在设置的超时时间范围内不断查找元素,直到找到元素或者超时 如:设置等待时间为5秒,在第3秒找到元素,不再继续等待

设置方式

driver.manage.timeouts().implicitlyWait(long time, TimeUnit unit);

实例:

driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);

优点:相对灵活

缺点: 设置是针对全局的,在WebDriver实例整个生命周期有效,但并不是所有的元素都需要等待。

不能适用条件更复杂的情况,如:元素可点击、元素可见

显式等待

显式等待通常是我们自定义的一段代码,用来等待某个条件发生后再继续执行后续代码(如找到元素、 元素可点击、元素已显示等)

使用方式:

WebDriverWait wait = new WebDriverWait(); WebElement element = wait.until(expectCondition);

优点: 每隔一段时间扫描一次页面,检查元素是否满足等待结果条件,比如查找元素,则检查元素是否存在, 不存在则继续等待,直到找到或超时。 该方式不是全局设置,因此特定需要等待的元素可以这样处理,推荐优先使用这一种方法。


显式等待实例:
1、实例化WebdriverWait对象 (设置显示等待的超时时间)

WebDriverWait webDriverWait = new WebDriverWait(driver,5);
2、使用WebdriverWait所提供的until方法(直到某个条件满足时为止)
webDriverWait.until(ExpectedConditions.elementToBeClickable(MobileBy.id("com.apple.apple2:id/navigation_shopping"))).click();
WebElement webElement1 = webDriverWait.until(ExpectedConditions.elementToBeClickable(MobileBy.id("com.apple.apple2n:id/button_go_login")));
webElement1.click();
等待手机号码输入框可见
WebElement webElement2 = webDriverWait.until(ExpectedConditions.visibilityOfElementLocated(MobileBy.id("com.apple.apple2n:id/et_mobile")));
webElement2.sendKeys("1234345656");
driver.findElement(MobileBy.AccessibilityId("购物车"));
显示等待和隐式等待的区别
  • 1、条件方面
  • 隐式等待findElement方法只会等待元素在当前页面中存在 显示等待等待元素可以定制更加丰富的条件:等待元素存在、等待元素可见、等待元素可悲点击
  • 2、作用范围:
  • 隐式等待设置一次之后就是全局生效 显示等待只能针对特定的元素
  • 3、超时异常:
  • 隐式等待:NoSuchElementException 显示等待:TimeoutException
  • 后面框架设计的时候我们会统一使用显示等待

 总结

  1. 三大等待 Thread.sleep() 隐式等待 显示等待
posted @ 2020-12-24 06:54  止语_07  阅读(169)  评论(0编辑  收藏  举报