0


【Selenium】一篇说清楚三大等待❗️硬等待 隐式等待 显示等待

1、硬性等待

Thread.sleep(long millis); 硬性等待(强行等待,等待时间过长)sleep(毫秒)

  • 优点:使用简单
  • 缺点:容易造成时间浪费
  • 使用场景:有的浏览器只能用硬性等待,或者有点场景显示/隐式等待都不行

2、隐式等待

在设置的超时时间范围内不断查找元素,直到 找到元素(元素存在)或者超时为止

全局的,就是设置了隐式等待后,每一条查找语句都要去隐式等待

如:设置等待时间为5秒,在第3秒找到元素,不再继续等待

  • 特点:全局,去当前网页的源码html中找,找到了该元素就不等待,一般等待一些常见的元素
  • 设置方式:driver.manage.timeouts().implicitlyWait(long time, TimeUnit unit);

long time:等待时长数字, TimeUnit unit:等待时长单位

 //设置等待时间为5秒  
driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
  • 优点:相对灵活
  • 缺点:设置是针对全局的,在WebDriver实例整个生命周期有效,但并不是所有的元素都需要等待

⚠️只能等待元素存在,不能适用条件更复杂的情况,如:元素可点击、元素可见才能操作,但是隐式等待是查元素是否在html源码存在,存在不一定可点击

思考场景:

比如一个弹窗的关闭按钮❌,页面缩放的时候看不到❌也不能点击,但是这时候html源码中是存在的,如果用隐式等待 能找到,但是实际执行点击操作却不行;

因为从html找到该元素,并不一定能点击,能可见,这时候需要 显式等待⬇️

3、显式等待

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

  • 特点:针对每一个元素可以设置不同的等待时间和等待条件,如果超时就报错
  • 使用方式:
WebDriverWait wait = new WebDriverWait(driver,5);
WebElement element = wait.until(ExpectCondition.方法(元素路径));
WebDriverWait(driver,5)------表示:等待5秒,还有第三个参数,不传的话默认500毫秒,即:每0.5秒轮训查找一次
  • 优点:

每隔一段时间扫描一次页面,检查元素是否满足等待结果条件,比如查找元素,则检查元素是否存在,不存在则继续等待,直到找到或超时。

该方式不是全局设置,因此特定需要等待的元素可以这样处理,推荐优先使用这一种方法。
方法等待条件presenceOfElementLocated❗️和隐式等待效果一样,是否在源码中存在页面元素在页面中存在visibilityOfElementLocated页面元素在页面存在并且可见elementToBeClickable页面元素是否在页面上可被单击urlContains("url"))等待url是否包含,返回boolean
举例:

WebDriverWait wait = new WebDriverWait(driver,5);
WebElement element = wait.until(ExpectedConditions.elementToBeClickable
        (By.xpath("//span[@class='layui-layer-setwin']//a")));
element.click();

⚠️ 元素是否可见和元素是否可点击是不一样的

不可见一定不可点击,可见不一定可点击(比如有可能被弹窗盖住了...),可点击一定可见

存在不一定可见,可见一定存在

android的toast,就是存在但是不可见:presenceOfElementLocated定位到,visibilityOfElementLocated定位不到


本文转载自: https://blog.csdn.net/weixin_40772077/article/details/136522519
版权归原作者 墨撕酒家 所有, 如有侵权,请联系我们删除。

“【Selenium】一篇说清楚三大等待❗️硬等待 隐式等待 显示等待”的评论:

还没有评论