首页 > 编程知识 正文

ui自动化测试平台,selenium自动化测试流程

时间:2023-05-05 00:23:02 阅读:26120 作者:4838

用户界面自动化是自动化测试不可分割的一部分,是黑匣子测试的重要手段。 在UI自动化测试的过程中,我们不可避免地会遇到各种各样的问题。 现在,我想总结一下自己在测试过程中遇到的问题,对大家有帮助。  

一、启动浏览器报错

3358 www.Sina.com/exceptioninthread ' main ' org.openqa.selenium.webdriverexception 3360 unknown error 3360 callfunction

出现上述错误消息是因为浏览器版本与驱动程序版本不匹配。 每个版本的驱动程序下载地址为https://NPM.Taobao.org/mirrors/chrome驱动程序; 在进行UI测试之前,请确保检查您的浏览器版本,然后找到相应版本的驱动程序,以便成功启动和测试浏览器。

报错信息:

例如,错误消息是值错误定位符' id=msgcount ' didnotmatchanyelements。

首先,确认是否设定了适当的等待时间。 在web ui测试期间,必须等待元素加载完成,然后导航到相应的元素。 然后,如果设置等待时间不能解决问题,请检查对齐方法是否正确,然后在不同的方法之间切换以对齐元素。 常见的元素对齐方法包括id、name、className、partialLinkText (、linkText、xpath、CSS选择器); 一般来说,找不到位置或找不到要素是因为没有设置合理的等待时间。

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

为了提高测试脚本的稳定性和实用性,设置合理的等待时间是必不可少的,为了提高测试效率,必须根据场景选择适当的等待方式。常见的等待方式有强制等待、隐式等待、显式等待三种。

33558www.Sina.com/time.sleep(x )在查找元素之前强制线程停止x秒。 由于此等待方法必须等待足够长的x秒才能执行相应的操作,因此可能会影响测试效率,一般不建议使用。

三、设置等待时间隐式等待是对网页加载的等待; 在整个编写测试用例的过程中,只强调一次,然后每次发生网页加载时执行等待,自动判断等待时间; 启动浏览器后,添加driver.implicitly_wait(5)即可。 其中,参数5表示页面在0-5s内加载即可,属于时间范围;

强制等待:显式等待是对元素的等待; 每次进行元素搜索时都需要强调。

webdriverwait (驱动程序,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类型的上传,web驱动程序的API无法处理上传文件时的系统对话框; 在这种情况下,可以使用AutoIT v3进行处理。 AutoIT脚本编译为可执行文件exe后,将放置在本地目录中以供程序调用。 调用方法如下。

Runtime rn=Runtime.getRuntime (;

rn.exec(「upload.exe”)

AutoIT是一种类似脚本语言的软件,利用该软件可以轻松实现模拟键盘、鼠标、窗口等操作并实现自动化。 网上有很多关于如何使用AutoIT实现文件上传的说明,有需要的学生可以在百度上看到,这里不再赘述。 AutoIT下载地址为https://www.autoit script.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。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。