自动化测试 | Selenium自动化测试框架,实战遇到的坑都在这了,玩转自动化测试
目录:导读
- 前言
- 一、浏览器出现新的页面
- 二、下拉选框的选择
- 三、常用的键盘事件
- 四、切换Frame(重要)
- 五、常见报错:element not interactble
- 六、属性几乎相同的div等元素-如何定位?
- 七、上传图片文件(文件上传框)
- 八、键盘&鼠标的操作调用
- 九、Chrome Version报错
- 十、总结
前言
如果费尽心思开发了一套近乎完美的自动化测试脚本,但是脚本的重复使用率很低,致使其间所耗费的成本大于所创造的经济价值,自动化测试便成为了测试人员的练手之作,而并非是真正可产生效益的测试手段了。
另外,在手工测试无法完成,需要投入大量时间与人力时也需要考虑引入自动化测试。比如性能测试、配置测试、大数据量输入测试等。
接下来我们就来看看平常web自动化测试的坑
一、浏览器出现新的页面
点击新建等按钮时,浏览器自动弹出了一个新页面,并显示新页面。接下来需要在新页面上继续自动化操作。
需要调用:
driver.switch_to.window(driver.current_window_handle)
来切换window,否则还是在原来的网页继续搜索元素。
二、下拉选框的选择
如果审查元素发现该控件的标签是Select类型:
# 使用Select函数需要先导入
from selenium.webdriver.support.ui import SelectSelect(driver.find_element_by_name('country')).select_by_visible_text(u'地图')
如果这不是Select标签类型的下拉选择框,则考虑展开后,鼠标点击对应选项元素,然后按下键盘的回车Enter按键。
driver.find_element_by_css_selector('xxx').send_keys(Keys.ENTER)
三、常用的键盘事件
# Keys.BACK_SPACE:回退键(BackSpace)
# Keys.TAB:制表键(Tab)
# Keys.ENTER:回车键(Enter)
# Keys.SHIFT:大小写转换键(Shift)
# Keys.CONTROL:Control键(Ctrl)
# Keys.ALT:ALT键(Alt)
# Keys.ESCAPE:返回键(Esc)
# Keys.SPACE:空格键(Space)
# Keys.PAGE_UP:翻页键上(Page Up)
# Keys.PAGE_DOWN:翻页键下(Page Down)
# Keys.END:行尾键(End)
# Keys.HOME:行首键(Home)
# Keys.LEFT:方向键左(Left)
# Keys.UP:方向键上(Up)
# Keys.RIGHT:方向键右(Right)
# Keys.DOWN:方向键下(Down)
# Keys.INSERT:插入键(Insert)
# DELETE:删除键(Delete)
# NUMPAD0 ~ NUMPAD9:数字键1-9
# F1 ~ F12:F1 - F12键
# (Keys.CONTROL, ‘a’):组合键Control+a,全选
# (Keys.CONTROL, ‘c’):组合键Control+c,复制
# (Keys.CONTROL, ‘x’):组合键Control+x,剪切
# (Keys.CONTROL, ‘v’):组合键Control+v,粘贴
四、切换Frame(重要)
如果html标签内嵌了html标签,那么可以在检查网页元素的debug模式下搜索frame关键字,很有可能是出现了内嵌frame需要切换context(上下文)。
常见场景:
从网页右键拷贝得到了元素的xpath或者css selector。该元素也显示在界面上。
却报错:
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element:
就有可能是上下文发生了更换,而没有切换到对应的frame。
# 选择 模板 按钮,在新的二级html里面,需要切换frame,切换frame可能需要时间,尝试适当sleep
editorFrame = driver.find_element_by_tag_name('iframe')
driver.switch_to.frame(editorFrame)sleep(2)
driver.find_element_by_xpath('//*[@id="editor"]/div/div[2]/a').click()
sleep(1)# 选择:在新的三级html里面,需要切换frame
templateFrame = driver.find_element_by_xpath('//*[@id="dialog-select"]/div/div[2]/span/iframe')
driver.switch_to.frame(templateFrame)
sleep(2)
driver.find_element_by_xpath('//*[@id="grid-form"]/table/tbody/tr[2]/td/a').click()
其中的editorFrame和templateFrame是页面内Tab下的iFrame标签下的html子标签,在网页上右键-选择审查元素,然后进行搜索关键字frame即可。
五、常见报错:element not interactble
尝试在操作之前增加sleep(5),等待系统元素树重载。
经验之谈:在页面发生转换、浮层切换,弹窗等焦点切换的场景下,尽量等待下再进行操作。
就是涉及页面大面积更换或者创建了新的弹窗、浮层等UI变动,如果报这个错误就sleep一会。
六、属性几乎相同的div等元素-如何定位?
场景截图:
sameDivElement.png
通过右击,查看元素,发现各个元素的各种属性都一样(不要疑惑,存在这种不规范的开发导致没有ID区分这几个元素,因为就是开发复制粘贴的代码)。
那么我要上传图片到指定的那一行怎么办呢?
接下来认识xpath的函数。
driver.findElement(By.xpath("//div[text()=\"A\"]")).click();
html源码的Demo参考:
<html>
<body><input type='checkbox' name='chk'>first<br><input type='checkbox' name='chk'>选项1<br><input type='checkbox' name='chk'>选项2<br><input type='checkbox' name='chk'>选项3<br><input type='checkbox' name='chk'>选项4<br><input type='checkbox' name='chk'>选项5
</body>
</html>
xpath支持的一些函数
Node set : last(), position(), count(), id(), local-name(), namespace-uri(), name()
String : string(), concat(), starts-with(), contains(), substring-before(), substring-after(), substring(), string-length(), normalize-space(), translate()
Boolean : boolean(), not(), true(), false(), lang()
Number : number(), sum(), floor(), ceiling(), round()
last() 函数,
last()-3 函数,
position()=4 函数。
都可以对属性相近的一列元素进行index定位。
//input[contains(@class, ‘suggest’)]
格式:
find_element_by_xpath('(xpath集合结果取值的表达式)[函数表达式]')
七、上传图片文件(文件上传框)
# App配图的「上传」按钮:向上传按钮发送file路径 key。同名元素可以使用函数position=3来定位
# python调用xpath函数方法driver.find_element_by_xpath('(//*[@id="uploadifive-undefined"]/input)[position()=3]').send_keys('/Users/lipeng/Downloads/Locators_groups_1_0_2.jpg')
八、键盘&鼠标的操作调用
from selenium.webdriver import ActionChains# 记得执行perform来调用队列中的操作。
actions = ActionChains(driver)
actions.move_to_element(menu)
actions.click(hidden_submenu)
actions.perform()
九、Chrome Version报错
selenium.common.exceptions.SessionNotCreatedException: Message: session not created: Chrome version must be between 70 and 73(Driver info: chromedriver=73.0.3683.68 (47787ec04b6e38e22703e856e101e840b65afe72),platform=Mac OS X 10.14.4 x86_64)
原因:Chrome版本和Chrome Driver版本不匹配
因为driver是我们手动从网站上下载的,而很多人的Chrome可能开启了自动更新功能。
随着使用的过程,Chrome版本过于新,导致driver不支持,此时需要重新从网站上下载新的Chrome Driver进行更换。
十、总结
越来越感觉,年轻人有目标,有理想,有梦想的重要性了。这是他们前进的动力,这是他们行动的方向,这是他们人生奋斗的灯塔。
世界原本就不是属于你,因此你用不着抛弃,要抛弃的是一切的执着。万物皆为我所用,但非我所属。
有能力就不必去气馁,有价值就不必炫耀。生命的质量取决于每天的心境,通过改变态度可以使得自己经常处于良好的心境状态。经过,才会明白坚持与放弃。就这样,于岁月中坚持,不言放弃。
自动化测试 | Selenium自动化测试框架,实战遇到的坑都在这了,玩转自动化测试相关推荐
- Selenium+Jsoup框架实现爬虫与自动化测试实战
爬虫的场景 小许同学想做一个新闻网站,但新闻网站需要很多新闻素材,并且新闻对实时性要求比较高,从发现新闻热点,写稿,审核,排版.发稿.投放需要多人多个部门协同完成,当你这些资源都不具备的时候,而你恰恰 ...
- python接口自动化测试框架实战从设计到开发_Python接口自动化测试框架实战 从设计到开发...
第1章 课程介绍(不要错过) 本章主要讲解课程的详细安排.课程学习要求.课程面向用户等,让大家很直观的对课程有整体认知! 第2章 接口测试工具Fiddler的运用 本章重点讲解如何抓app\web的h ...
- 史上最全 Appium 自动化测试从入门到框架实战精华学习笔记(二)
本系列文章汇总了从 Appium 自动化测试从基础到框架高级实战中,所涉及到的方方面面的知识点精华内容(如下所示),希望对大家快速总结和复习有所帮助. Appium 自动化测试从基础到框架实战 App ...
- 11小时 python自动化测试从入门到_从设计到开发Python接口自动化测试框架实战,资源教程下载...
课程名称 从设计到开发Python接口自动化测试框架实战,资源教程下载 课程简介: 课程从接口基础知识入门,从抓包开始,到接口工具的运用,再到常见接口库.接口开发.Mock服务.unittest框架的 ...
- selenium java框架_自动化测试框架selenium+java+TestNG——配置篇
最近来总结下自动化测试 selenium的一些常用框架测试搭配,由简入繁,最简单的就是selenium+java+TestNG了,因为我用的是java,就只是总结下java了. TestNG在线安装: ...
- 史上最全 Appium 自动化测试从基础到框架实战精华学习笔记(一)
本文为霍格沃兹测试学院学员学习笔记,进阶学习文末加群. 对测试人来说,Appium 是非常重要的一个开源跨平台自动化测试工具,它允许测试人员在不同的平台(iOS.Android 等)使用同一套 API ...
- python自动化测试教程百度云盘_Python接口自动化测试框架实战视频教程百度云下载...
主流的Fiddler.Requests.Unittest.Mock等接口测试工具/框架应用 进阶自动化框架设计开发 课程目录: 1-1 接口自动化测试从基础到框架-导学 1-2 接口基础知识回顾 1- ...
- python怎么做自动化测试仪器经销商_Python自动化测试踩坑记录(企业中如何实施自动化测试)...
企业中如何实施自动化测试 在我们读高中的时候, 是不是经常听老师说:学好数理化,走遍天下都不怕. 作为软件测试这个行业,在当下,你学好自动化,你去哪面试都不怕. 说是这么说,但是你想提前下班,自动化测 ...
- python自动化测试开发_基于python的selenium2自动化测试从基础到实战(Python3、selenium2、自动化测试、web测试)...
Selenium2是目前比较流行的一款针对web页面测试的自动化测试工具,他的前身是Selenium .Selenium测试直接运行在浏览器中,就像真正的用户在操作一样.支持的浏览器包括IE.Mozi ...
最新文章
- 中国ATM龙头转型 全要素布局人工智能
- php laravel 框架 APP_KEY 的作用
- python绘制剖面图_干货!告诉你详细的剖面图绘图方法和步骤
- usb接口供电不足_电脑USB接口不够用?来试试ORICO条纹hub扩展器吧
- ps怎么清屏_PS:oracle恢复删除的数据
- C语言中使用静态函数的好处
- wechat code miniprogram 没有找到可以构建的 NPM 包
- 【数据湖加速篇】 —— 如何利用缓存加速服务来提升数据湖上机器学习训练速度
- SpringBoot自定义Filter
- 文本编辑软件哪个好_过年倒计时软件哪个好 过年倒计时软件推荐
- pythonapi异步_Python-FastAPI异步博客开发记录--异步篇
- 【无标题】快宝电子面单接口
- 重新学习《C++Primer5》第16章-模板与泛型编程
- 外星文明 未来计算机,科学家有望未来在地球“设计打印”外星生命
- leetcode — 46. 全排列(不含重复数字)
- 电商浪潮过后,无人零售会引领新零售的爆发吗
- hacks cheats injection
- Android调用系统相机拍摄视频以及获取缩略图
- 虚拟存储器 与虚拟内存详解
- Oo0代码混淆实现方法