selenium+java三种等待方式

【碎碎念】
在进行UI自动化测试时,需要等元素加载完成,才能对元素进行操作,不然找不到元素会报错,因此需要增加等待
上篇selenium+java元素定位的使用中,用到了三种等待方式,强制等待、隐式等待、显式等待。
看了一些视频、资料,发现上篇关于等待部分有一些坑。这篇来学习并排下坑吧。
有表述不正确的,欢迎指正。 
selenium waits文档: https://www.selenium.dev/documentation/en/webdriver/waits/ 
【正文】
三种等待方式:
1.隐式等待Implicit Wait
一直等待页面加载完成,直至超时。
在创建webDriver后添加这行代码:
    driver.manage().timeouts().implicitlyWait(60,TimeUnit.SECONDS);//隐式等待

注意1:
Warning: Do not mix implicit and explicit waits. Doing so can cause unpredictable wait times. 
For example, setting an implicit wait of 10 seconds and an explicit wait of 15 seconds could cause a timeout to occur after 20 seconds. 
警告: 请勿混合使用隐式和显式等待。这样做可能导致无法预测的等待时间。例如,将隐式等待设置为10秒,将显式等待设置为15秒,则可能导致20秒后发生超时。
(上篇就混用了...)

注意2:
 An implicit wait is to tell WebDriver to poll the DOM for a certain amount of time when trying to find an element or elements if they are not immediately available.
 The default setting is 0, meaning disabled. Once set, the implicit wait is set for the life of the session. 
隐式等待是告诉WebDriver在尝试查找一个或多个元素(如果它们不立即可用)时轮询DOM一定时间。默认设置为0,表示已禁用。设置后,将在会话生命周期内设置隐式等待。
即:隐式等待是针对全局的设置


2.强制等待
不管页面是否加载完,强制指定等待时间后继续执行。不建议用这种方式。
示例:Thread.sleep(20000);// 休眠20秒
3.显式等待 Explicit Wait
需要调用的元素加载完成即可执行下一步。
上篇示例:
 WebDriverWait wait = new WebDriverWait(driver, 20, 5); //显示等待 /*根据link text定位元素*/          
 WebElement findPwd =wait.until(ExpectedConditions.presenceOfElementLocated(By.linkText("找回密码")));     
   
PS:官网还介绍了一种等待方式:流畅等待
官网代码示例:
// Waiting 30 seconds for an element to be present on the page, checking
// for its presence once every 5 seconds.
Wait<WebDriver> wait = new FluentWait<WebDriver>(driver)
  .withTimeout(Duration.ofSeconds(30))//最大等待时间是30s
  .pollingEvery(Duration.ofSeconds(5))//每隔5s去找一次元素是否在页面显示
  .ignoring(NoSuchElementException.class);//忽略NoSuchElement异常

WebElement foo = wait.until(new Function<WebDriver, WebElement>() {
//等待条件
  public WebElement apply(WebDriver driver) {
    return driver.findElement(By.id("foo"));
  }
});
WebDriverWait 继承 FluentWait。 
https://blog.csdn.net/weixin_39218743/article/details/86699516 【侵权删】
FluentWait 和 Explicit Wait的区别:
Explicit Wait里有一些设定好了的前置条件的等待方式,而Fluent wait你可以设置自己的方法去处理各种等待的问题。


【时刻面试】
Q:软件测试的流程?
A:测试需求分析阶段:阅读需求、理解需求
->测试计划阶段:编写测试计划
-->测试设计阶段:编写测试用例
-->测试执行阶段:搭建测试环境、执行测试、提交缺陷报告、回归测试等
-->测试评估阶段:测试报告

Q:post和get的区别?
A: (w3cschool)
GET在浏览器回退时是无害的,而POST会再次提交请求。
GET产生的URL地址可以被收藏为书签 ,而POST不可以。
GET请求会被浏览器主动cache,而POST不会,除非手动设置。
GET请求只能进行url编码,而POST支持多种编码方式。
GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。
GET请求在URL中传送的参数是有长度限制的(2k),而POST没有。
对参数的数据类型,GET只接受ASCII字符,而POST没有限制。
GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。
GET参数通过URL传递,POST放在Request body中。 
GET产生一个TCP数据包,POST产生两个TCP数据包。
另外,看完这个博主的分析https://www.cnblogs.com/logsharing/p/8448446.html 我好像明白了什么。

GET和POST是 HTTP协议中的两种发送请求的方法,其底层都是TCP/IP协议。
HTTP对GET和POST参数的传送渠道(url还是requrest body)提出了要求:GET参数通过URL传递,POST放在Request body中;
不同浏览器和服务器对参数大小的限制不同:GET请求在URL中传送的参数是有长度限制的(2k),而POST没有;
GET和POST最重要的区别是GET产生一个TCP数据包,POST产生两个TCP数据包。

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章