dcsxlh

导航

 

自动化中遇到的问题:

=====================================
1、动态元素定位不到
解决方法:尽量使用固定元素定位,如没有固定元素,则采用绝对路径进行定位,因为元素路径是唯一且不变的
2、自动化脚本执行速度较慢
尽量使用css方法定位元素,使用等待时,少用sleep方法,尽量不用隐式等待,涉及到一些if elif条件判断时,尽量把可能发生的条件放在前面写,这样可以减少程序判断的次数,提高效率

3、弹框内有按钮点击不到

解决方法:弹框里面有设置滚动条,首先进入弹框里面,将滚动条滑动到最底部才可以点击确定或者取消按钮

 4、

报错:启动后,打开谷歌浏览器,不出现内容,报浏览器不安全|data

解决方法:webdriver-chrome版本升级

 5、元素没有加载出来

因为时间等待原因:显示等待(只匹配目标元素),隐式等待(等待页面加载完成),强制等待

6、定位的元素是随机变化的

解:通过元素xpath或者css来定位

7、定位动态元素?

解决:通过相对位置来定位

8、

定位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方式进行定位,以保证元素查找的唯一性。
9、

处理页面弹出框Alert

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

driver.switch_to.alert.accept() # 通过accept,关闭弹出框

driver.switch_to.alert.dismiss() # 通过dismiss,关闭弹出框

driver.switch_to.alert.text #获取弹出框文字


10、

iframe或frame处理

  在元素定位过程中,如果出现了<frame>或者<iframe>标签,说明该页面中嵌套了一个新的页面,该页面内的元素无法直接定位。因此,在定位新页面元素之前,我们需要先执行driver.switch_to.frame()方法,切换到该frame下面,再对该frame下的元素进行定位和操作;如果想操作该frame以外的元素,可以通过driver.switch_to.parent_frame()方法切换到上一级frame。
11、处理图片验证码 

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

  http://ai.baidu.com/docs#/OCR-API/top

12、

日历控件

  日历控件是一种特殊的网页元素,由于其操作的复杂性,我们无法通过模拟手工操作来进行一步步的选择。检查页面元素可以发现,日历控件属于input类型,但是由于其readonly属性,无法使用send_keys直接输入;因此,我们可以通过调用JavaScript脚本(打开Chrome浏览器-右键点击检查-进入console,即可进行JavaScript代码调试

  ),先删除其readonly属性,再使用sendkeys方式进行输入,代码如下:

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

13、

处理页面弹出框Alert

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

driver.switch_to.alert.accept() # 通过accept,关闭弹出框

driver.switch_to.alert.dismiss() # 通过dismiss,关闭弹出框

driver.switch_to.alert.text #获取弹出框文字
14、

切换浏览器窗口

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

15、

上传文件

  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/
15、启动浏览器报错

  报错信息: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,这样才能正常启动浏览器进行测试。

======================================

报错现象:

1、出现"object is not iterable":
首先查看脚本,测试用例出现问题
组织用例时出现错误(我开始是用for循环遍历y,加入测试集合中,返回集合,老是会出现错误,最后改成下方代码,直接返回y,解决问题)

 

 

2、出现"str object is not callable"的问题
原因是:使用定义的变量名字与内置模块名字相同,(我的原因是:在basePage.py文件中,“得到文本的函数,element.txt后面多加了一对括号”,取消就好了)。针对自己的脚本,检查变量的名字,相同的更改一下

posted on 2022-08-31 10:37  多测师_肖sir  阅读(267)  评论(0编辑  收藏  举报