• 0
  • 0
分享
  • UI自动化测试的十大问题汇总——软件测试圈
  • 饭团🍙 2022-09-22 11:51:53 字数 3276 阅读 3654 收藏 0

UI自动化是自动化测试中不可分割的一部分,是黑盒测试的一种重要手段。在UI自动化测试过程中,我们不可避免会遇到各种各样的问题,现将自己在测试过程中遇到的问题进行汇总,希望可以为大家提供帮助。 

一、启动浏览器报错

报错信息:

Exception in thread "main" org.openqa.selenium.WebDriverException: unknown error: call function result missing 'value'

出现以上报错信息,是由于浏览器版本与driver版本不匹配,各版本driver下载地址为

https://npm.taobao.org/mirrors/chromedriver;在进行UI测试之前,一定要先检查自己浏览器的版本,然后找到对应版本的driver,这样才能正常启动浏览器进行测试。

二、无匹配元素/元素不可见

例如,报错信息为:

ValueError: Element locator 'id=msgCount' did not match any elements.

首先,确认是否设置了合理的等待时间,在web的UI测试过程中,我们需要等待元素加载完成之后,才可以定位到对应的元素;

其次,如果设置等待时间仍然无法解决问题,再检查定位方式是否准确,并切换不同的方式进行元素定位,常用的元素定位方法包括id、name、className、partialLinkText()、linkText、xpath、cssSelector();

一般情况下,出现无法定位或者找不到元素的情况,都是由于没有设置合理的等待时间。

三、设置等待时间

为了提高测试脚本的稳定性和实用性,设置合理的等待时间是必不可少的,我们需要根据不同的场景,选择合适的等待方式,以提高测试效率;常用的等待方式包括强制等待、隐式等待和显式等待三种。

强制等待:time.sleep(x),在查找元素前强制线程停止x秒,由于这种等待方式是必须等够x秒之后,才执行对应的操作,因此可能会影响测试效率,一般不建议使用;

隐式等待:隐式等待是对网页加载的等待;在整个测试用例编写过程中,只需强调一次,之后每次出现网页加载都执行一次等待,自动判断等待时间;在启动浏览器后,加一个driver.implicitly_wait(5)即可;其中,参数5表示,页面在0-5s内加载出来即可,是一个时间范围;

显式等待:显式等待是对元素的等待;在每次进行元素查找之前都需要强调一次:

WebDriverWait(driver,20,0.5).until(expected_conditions.alert_is_present())

其中,20s表示最大等待时间,0.5s表示轮询时间间隔;检查到元素即停止等待,执行下一个操作;

四、上传文件

Web的UI自动化测试过程中,我们不可避免要处理文件上传,最简单的方式是通过sendkeys来处理,这种方式简单、清晰、高效,是处理文件上传的首选,代码如下:

driver.find_element(By.ID,'upload').send_keys('D:/upload.txt');

但是这种方式只适用于元素标签为input类型的上传,webdriver的API无法处理上传文件时系统的对话框;此时,我们可以采用AutoIT v3进行处理,AutoIT脚本编译成可执行文件exe后,放到本地的某一个目录下供程序调用,调用方法如下:

Runtime rn=Runtime.getRuntime();
Rn.exec(“upload.exe”)

AutoIT是一个类似脚本语言的软件,利用此软件我们可以方便的实现模拟键盘、鼠标、窗口等操作,实现自动化。关于使用AutoIT实现文件上传的方法,网络上有很多解释,有需要的同学可以百度查看,此处不再展开描述。AutoIT下载地址为:https://www.autoitscript.com/site/autoit/downloads/

五、切换浏览器窗口

在进行UI自动化测试过程中,我们通过链接打开一个新的页面时,需要进行窗口切换,才能在新页面进行操作,代码如下:

其中,driver.getWindowHandle();获取当前窗口句柄(系统分配的唯一标识,跟身份证一样)

driver.getWindowHandles();获取当前浏览器所有窗口的句柄集

此外,获取当前浏览所有窗口的句柄集,相当于一个列表,也可以通过如下代码来切换到最新打开的页面:

new_handle=driver.getWindowHandles()[-1];
driver.swicth_To().window(new_handle);

六、定位Webdriver定位class属性中有空格的值

例如:定位" class="bg s_btn",一共有三种处理方式:

self.browser.find_element_by_class_name("s_btn").submit()   #第一种解决办法:class值取其中之一
self.browser.find_element_by_class_name("bg").submit()   #第二种解决办法:class值取其中之一
self.browser.find_element_by_css_selector(".bg.s_btn").submit()  #第三种解决办法:使用css.selector,每个class值前面加.

其中,在使用前两种方法的时候,需要确认我们选取的元素不会在该页面上存在重复,因此建议使用css.selector方式进行定位,以保证元素查找的唯一性。

七、处理页面弹出框Alert

Alert是JavaScript控件,无法通过元素定位的方式进行处理,Webdriver提供了以下方式来对控件进行处理:

driver.switch_to.alert.accept()   # 通过accept,关闭弹出框
driver.switch_to.alert.dismiss()  # 通过dismiss,关闭弹出框
driver.switch_to.alert.text   #获取弹出框文字

八、日历控件

日历控件是一种特殊的网页元素,由于其操作的复杂性,我们无法通过模拟手工操作来进行一步步的选择。检查页面元素可以发现,日历控件属于input类型,但是由于其readonly属性,无法使用send_keys直接输入;

因此,我们可以通过调用JavaScript脚本(打开Chrome浏览器-右键点击检查-进入console,即可进行JavaScript代码调试),先删除其readonly属性,再使用sendkeys方式进行输入,代码如下:

driver.execute_script('document.getElementById("date").removeAttribute("readonly")')

九、处理图片验证码

在进行登录注册等操作时,我们经常需要处理一些验证码;除了通过万能码进行登录之外,我们还可以调用百度提供的开放接口进行验证码处理,接口说明文档如下:http://ai.baidu.com/docs#/OCR-API/top

十、iframe或frame处理

在元素定位过程中,如果出现了<frame>或者<iframe>标签,说明该页面中嵌套了一个新的页面,该页面内的元素无法直接定位。

因此,在定位新页面元素之前,我们需要先执行driver.switch_to.frame()方法,切换到该frame下面,再对该frame下的元素进行定位和操作;如果想操作该frame以外的元素,可以通过driver.switch_to.parent_frame()方法切换到上一级frame。


作者:sinat_32434273

原文链接:https://blog.csdn.net/sinat_32434273/article/details/104905755

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

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          • 一、什么是 Monkey 测试Monkey 测试是通过向系统发送伪随机的用户事件流(如按键输入、触摸屏输入、手势输入等),实现对应用程序客户端的稳定性测试;通俗来说,Monkey 测试即“猴子测试”,是指像猴子一样,不知道程序的任何用户交互方面的知识,就对界面进行无目的、乱点乱按的操作;Monkey 测试是一种为了测试软件的稳定性、健壮性的快速有效的方法;Monkey 程序是 Android 系统自带的,由 Java 语言写成,在 Android 文件系统中的存放路径是:/s...
            6 6 2488
            分享
          •   不知道大家知不知道软件质量模型这个概念。  软件质量模型是衡量软件整体质量效果的度量标准。目前常见的质量模型包括麦考尔模型、博恩模型、FURPS模型、德罗梅模型和ISO9126模型。  一般来说,软件产品需要满足的特征包括功能性、可靠性、易用性、效率性、可维护性和可移植性。  软件质量模型还有另外一个功能:当你不知道如何设计某个产品的测试用例或者需要补充什么用例时,可以参考软件质量模型的标准。  功能  软件提供满足显式和隐式需求的功能的能力。  这就要求产品具有特定的能力,并且能够正确、完整、准确地工作。  正确的账号和密码应该能够正常登录,错误的账号和密码应该被拦截并给出正确的提示。同...
            0 0 660
            分享
          •   当地时间周二,硅谷银行新任首席执行官Tim Mayopoulos对客户表示,硅谷银行已经恢复开门,准备接收和持有客户的存款。此番言论是在呼吁风投公司和其他科技客户重新回到该银行。  Tim表示:“如果你、你的投资组合公司或你公司在过去一周内转移了资金,请考虑将其中一些资金转移回来,作为安全存款多样化战略的一部分。”  Tim对客户群表示:“储户可以完全接触到他们的资金。”并补充说,新流入的资金和现有的存款都受到联邦存款保险公司的全面保护。  上周,硅谷银行刚发布的季度显示其亏损出售了价值210亿美元的证券,导致创企和VC基金纷纷逃离,超过420亿美元的存款被撤出硅谷银行。硅谷银行倒闭是美国...
            0 0 889
            分享
          • 互联网时代的到来,互联共享成为主旋律。多个互联网公司之间的合作越来越深入,越来越紧密,接口测试的重要性显得越来越突出。今天就把我接口测试的思路分享出来,希望可以给大家指明测试的方向,开拓大家的测试思维。从一个模型说起,进行接口测试两年多了,不断的测试,不断的摸索,将接口测试抽象成如下模型:模型很简单,就是四个模块,为了更好的说明这一点,我接下来展开来说。第一:接口文档测试。对于接口接口文档是双方约定的最基础的约定,数据能否正常传输依赖于接口文档,接口文档定义的标准、规范。对于这个接口来说已经完成了大部分的工作。从接口文档中我们要剖析出以下的点展开测试:【1】首先明确请求的数据类型是什么,主流的...
            6 14 4349
            分享
          • 把做Android开发以来碰到的一些不错的性能分析工具做个整理汇总...Debug GPU Overdraw类型:系统自带功能UI渲染检测功能(打开Settings,然后到 Developer Options -> Debug GPU Overdraw 选择 Show overdraw areas,手机系统设置中文的孩纸,自行对照翻译进去哈)作用:用来检测UI的重绘次数,开发者可以用来优化UI的性能。使用心得:检测UI性能的利器,对于开发者做UI优化的帮助挺大的。因为大量的重绘容易让app造成卡顿或者直接导致丢帧的现象。开发者熟悉View的绘制原理可以结合对一些布局或者自定义控件做相应的...
            13 13 992
            分享
      • 51testing软件测试圈微信