• 0
  • 0
分享
  • 软件测试工程师必知必会!——软件测试圈
  • TIMI 2021-08-18 15:20:24 字数 3351 阅读 1409 收藏 0

一、等待的作用

等待的作用

在实际自动化实现过程中,都会添加等待来完善自动化测试的代码。

自动化测试,是交由机器来执行的一种测试手段,用于提升测试效率,意味着每一次的自动化测试都 需要有非常高的成功率,才可以达到提升效率的作用。

在自动化测试中,其实就是通过代码,来执行测试的流程,也就意味着机器知己对页面元素来进行操 作,如果说因为页面加载速度过慢,导致元素无法被第一时间找到,则报错,停止本次自动化测试, 通过添加等待的方法,让代码在运行时,会进行等待页面加载的操作,以便于更好的进行元素查找。

我们平常用到的有三种等待方式:

  1. 强制等待

  2. 隐式等待

  3. 显示等待

二、三种等待方式

1:强制等待

第一种也是使用最简单的一种办法就是 强制等待 sleep(X) ,强制让浏览器等待 X 秒,不管当前操作是否完成,是否可以进行下一步操作,都必须等X 秒的时间。

使用方法 : sleep(X) ,等待 X 秒后,进行下一步操作。在 python 中,是基于 time 模块的 sleep 方法来实现。

缺点:

  1. 不能准确把握需要等待的时间(有时操作还未完成,等待就结束了,导致报错;有时操作已经完成了,但等待时间还没有到,浪费时间)。

  2. 如果在用例中大量使用,会浪费不必要的等待时间,影响测试用例的执行效率。

优点 :

1. 使用简单,可以在调试时使用。

强制等待案例

案例 1 :打开百度,等待 3 秒,关闭浏览器

1.jpg

2:隐式等待

第二种方法是 隐式等待 ,其设置了一个最长等待时间,如果在规定时间内网页加载完成,则执行下一步,否则一直等到时间结束,然后执行下一步操作。

使用方法 : implicitly_wait(10) ,在 X 时间内,页面加载完成,进行下一步操作。

缺点 :

  1. 使用隐式等待,程序会一直等待整个页面加载完成,才会执行下一步操作;但有时候页面想要的元素早已经加载完成了,但是因为网页上个别元素还没有加载完成,仍要等到页面全部完成才能执行下一步,使用也不是很灵活。

  2. 在等待时间内页面没有加载完成,时间一到也会进入下一步操作;这种情况可能出现要定位的元素没有出现,从而报元素无法找到的错误。

优点 :

1. 隐性等待对整个 driver 的周期都起作用,每一次操作都会调用隐式等待,所以只要设置一次即可。

隐式等待案例

案例 2 :打开百度,输入北京,点击搜索,点击第一个查询结果。使用隐式等待。

2.jpg

3:显示等待

第三种办法就是 显性等待 , 对指定元素进行等待的一种等待方式 。通过设置最大等待时间,检查频率对页面的元素来进行等待,一旦找到元素,则停止等待,进入后续步骤。

它主要的意思就是:程序每隔 X 秒看一眼,如果条件成立了,则执行下一步,否则继续等待,直到超 过设置的最长时间,然后抛出TimeoutException 异常。

缺点 :

  1. 使用相对比较复杂;

  2. 和强制等待类似,每一行等待只执行一次,如果要进行多个元素的等待,则需要多次写入。

优点 :

1. 等待判断准确,不会浪费多余的等待时间,在用例中使用,可以提高执行效率。

WebDriverWait类

显示等待使用思路:

  1. 导包 from selenium.webdriver.support.wait import WebDriverWait

  2. 对WebDriverWait 类进行实例对象操作

WebDriverWait(driver, timeout, poll_frequency=0.5, ignored_exceptions=None)

driver :浏览器驱动

timeout :最大等待时间

poll_frequency :检测的间隔时间,默认 0.5

signored_exceptions :超时后的异常信息,默认抛出 NoSuchElementException

WebDriverWait类

显示等待使用思路:

  3. 调用until()和 until_not 方法来等待元素

def until(self, method, message='')

含义:直到条件成立返回为真,等待结束。如果超时,抛出 TimeoutException ,将 message 传入异常。

参数:

  1. method:在等待期间,每隔一段时间调用这个传入的方法,直到返回值不是 False ,一般使用 lambda 匿名函数。

  2. message:提示信息,出现异常时会将这个信息输出在控制台

def until_not(self, method, message='')

含义:与 until 相反, until 是当某元素出现或什么条件成立则继续执行, until_not 是当某元素消失或什么条件不 成立则继续执行,参数也相同,不再赘述。

显示等待案例

案例 3 :打开百度,输入北京,点击搜索,点击第一个查询结果。使用显示等待

3.jpg

selenium判断元素的方法

ele.is_displayed():判断某个元素是否显示页面上
ele.is_selected():判断某个元素是否被选中
ele.is_enables():判断某个元素是否可以操作,如判断 input 、 select 等元素的可编辑状态,如按钮是否可以点击

selenium判断元素的方法

4.jpg

三、判断元素的操作expected_conditions

selenium判断元素的方法

面试的时候经常会被问到,如何判断一个元素是否存在,如何判断 alert 弹窗出来了,如何判断动态的元素等等一系列的判断,在 selenium 的 expected_conditions 模块收集了一系列的场景判断方法。

expected_conditions 是 Selenium 的一个模块,主要用于对页面元素的加载进行判断,包括元素是否存在可点击等等。

Expected Conditions 的使用场景一版有两种:

  1. 直接在断言中使用;

  2. 与WebDriverWait 配合使用,显示等待页面上元素出现或者消失。

Expected Conditions导入

一般情况下,我们在使用 expected_conditions 模块时都会对其进行重命名,通过as关键字对其重命 名为EC。

  1. 导包:from selenium.webdriver.support import expected_conditions as EC

  2. EC模块单独使用语法:

EC. 方法 ( 参数 )(driver)
EC. 方法 ( 参数 ).__call__(driver)

Expected Conditions常用操作

1. title_is(title)

title_is(title)判断网页 title 是否是特定文本(英文区分大小写),若完全相同则返回 True ,否则

返回 False 。

2. title_contains(title)

title_contains(title)判断网页 title 是否包含特定文本(英文区分大小写),若包含则返回 True ,

不包含返回 False 。

Expected Conditions常用操作

需求:打开 https://www.baidu.com ,判断打开页面的标题是否为百度一下,你就知道;判断打开页面 的标题中是否包含百度一下

5.jpg

Expected Conditions常用操作

3. presence_of_element_located(locator)(重点,常用)

presence_of_element_located(locator)判断一个元素存在于页面 DOM 树中,存在则返回元素本身,不存在则 报错。

参数 locator : 定位器是一个数据类型元组(" 元素定位方式 "," 方式对应的值 ")("id","id 属性值 ") 或者(By.ID,'id 属性值 ' )

4. presence_of_all_elements_located(locator)

presence_of_all_elements_located(locator)判断定位的元素范围内,至少有一个元素存在于页面当中,存在则 以list 形式返回元素本身,不存在则报错。


作者:软件测试阿沐

原文链接:https://blog.csdn.net/m0_60126160/article/details/118977021

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          • 现阶段,发红包抢红包的功能已经十分常见,一些日常使用的app中基本都带有红包这个功能。今天主要来韶一韶测试红包功能时,我们都需要考虑什么呢?~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~【发红包】数字输入框:(1)数字:测试0, 0.009, 0.01,0.011, 01, 199.99, 200, 200.01这些边界值,中文、英文、特殊字符或者这几种的组合这些是禁止输入的。(2)是否支持复制黏贴,数字从别处粘贴过来,能正常复制吗?(3)为空/包含空格是否能过滤,会不会造成数据库报错。(4)金额的增删查改,修...
            1 1 8408
            分享
          •   想要做好代码质量,我们不得不提什么是代码质量?本次回答中讨论的代码质量一般是指代码的风格、重复率和复杂度等,代码是技术团队的价值产物,是宝贵的财富,同样代码质量的好坏可以直接体现出团队的重视程度和技术管理水平。  代码质量的下降是内在原因,通常会恶性循环,主要表现出以下两个特性:  感染性:坏代码总能在部门渲染着只要业务交付达成,代码质量不重要的负面气氛,严重减低了研发人员的技术热情,破坏工作氛围,导致更多的坏代码出现。  心理暗示性:在坏代码基础上继续生产坏代码的"罪过"减轻。  为什么会产生这样的结果,这里我与你举个生活中的栗子,我在上个周日收拾房间,发现一个房间衣...
            0 0 692
            分享
          •   据 Tech 星球报道,支付宝于近期内测一项名为“兴趣社区”的社交功能,定位是发现有趣找到玩伴,用户可以在社区内体验潮酷生活,结识同频兴趣玩伴。目前,该功能还处于内测阶段。  报道称,“兴趣社区”入口位于支付宝 App 内的消息页面上方,点击进入后,即可来到兴趣社区界面。该社区以小组为社交点,用户可以根据自己的爱好,加入到徒步发烧友、骑行的世界、钓友请上车等多个兴趣小组;还设有“附近的热门活动”,用户在寻找到搭子后,即可参与报名。  据此前报道,支付宝曾在 2016 年涉足社交领域,推出了“圈子”功能,依据人群及兴趣,划分出多个共享社区。  但随着“校园日记”和“白领日记”两个圈子的火爆,...
            0 0 1031
            分享
          • 1、fiddler抓取不了微信小程序的包最近突然遇到微信抓取不到小程序包,之前都是好的,但突然就凉凉了,经过不懈的查找终于在某个大佬的文章找到解决方法。原址在这里:https://mbd.baidu.com/ma/s/VwHQ8Rom以下是自己的操作记录。打开小程序,然后打开任务管理器找到小程序的应用,右键点击小程序,或者Mini Programs打开文件所在位置,在Plugins下有个WMPFRuntime包先将小程序和微信都关闭掉,然后将WMPFRuntime包内的文件都删除掉,关闭电脑防火墙,重新登陆微信,将小程序移除后重新获取,打开fiddler就可以进行抓包了!PS:如果出现设置好后...
            2 1 22240
            分享
          •   技术背景  需要有一定的python基础,代码阅读能力;以及自动化测试思想。  去到任何一家企业,如果少不了自动化,必然会要搭建一套自动化测试框架!  那么问题随之而来,这框架如何选择呢?  如果是代码能力强,可以自行开发与设计,那要是不呢?KPI摆在那,总不能说不行吧!  不行,代表着真的不行,在测试职业领域真的没有什么测试的不行!作者回顾以往工作经历,测试从来没有说过不字。  不会安全测试,但总得会几样安全型测试工具吧,不济也该知道安全测试的目的和原理吧。  不会性能测试,但总得会使用工具吧,理解性能测试指标和知道如何设计性能测试场景吧。  不会单元测试,不会自动化测试?不会渗透测试?...
            0 0 1050
            分享
      • 51testing软件测试圈微信