目录:导读

  • 前言
  • 一、浏览器出现新的页面
  • 二、下拉选框的选择
  • 三、常用的键盘事件
  • 四、切换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自动化测试框架,实战遇到的坑都在这了,玩转自动化测试相关推荐

  1. Selenium+Jsoup框架实现爬虫与自动化测试实战

    爬虫的场景 小许同学想做一个新闻网站,但新闻网站需要很多新闻素材,并且新闻对实时性要求比较高,从发现新闻热点,写稿,审核,排版.发稿.投放需要多人多个部门协同完成,当你这些资源都不具备的时候,而你恰恰 ...

  2. python接口自动化测试框架实战从设计到开发_Python接口自动化测试框架实战 从设计到开发...

    第1章 课程介绍(不要错过) 本章主要讲解课程的详细安排.课程学习要求.课程面向用户等,让大家很直观的对课程有整体认知! 第2章 接口测试工具Fiddler的运用 本章重点讲解如何抓app\web的h ...

  3. 史上最全 Appium 自动化测试从入门到框架实战精华学习笔记(二)

    本系列文章汇总了从 Appium 自动化测试从基础到框架高级实战中,所涉及到的方方面面的知识点精华内容(如下所示),希望对大家快速总结和复习有所帮助. Appium 自动化测试从基础到框架实战 App ...

  4. 11小时 python自动化测试从入门到_从设计到开发Python接口自动化测试框架实战,资源教程下载...

    课程名称 从设计到开发Python接口自动化测试框架实战,资源教程下载 课程简介: 课程从接口基础知识入门,从抓包开始,到接口工具的运用,再到常见接口库.接口开发.Mock服务.unittest框架的 ...

  5. selenium java框架_自动化测试框架selenium+java+TestNG——配置篇

    最近来总结下自动化测试 selenium的一些常用框架测试搭配,由简入繁,最简单的就是selenium+java+TestNG了,因为我用的是java,就只是总结下java了. TestNG在线安装: ...

  6. 史上最全 Appium 自动化测试从基础到框架实战精华学习笔记(一)

    本文为霍格沃兹测试学院学员学习笔记,进阶学习文末加群. 对测试人来说,Appium 是非常重要的一个开源跨平台自动化测试工具,它允许测试人员在不同的平台(iOS.Android 等)使用同一套 API ...

  7. python自动化测试教程百度云盘_Python接口自动化测试框架实战视频教程百度云下载...

    主流的Fiddler.Requests.Unittest.Mock等接口测试工具/框架应用 进阶自动化框架设计开发 课程目录: 1-1 接口自动化测试从基础到框架-导学 1-2 接口基础知识回顾 1- ...

  8. python怎么做自动化测试仪器经销商_Python自动化测试踩坑记录(企业中如何实施自动化测试)...

    企业中如何实施自动化测试 在我们读高中的时候, 是不是经常听老师说:学好数理化,走遍天下都不怕. 作为软件测试这个行业,在当下,你学好自动化,你去哪面试都不怕. 说是这么说,但是你想提前下班,自动化测 ...

  9. python自动化测试开发_基于python的selenium2自动化测试从基础到实战(Python3、selenium2、自动化测试、web测试)...

    Selenium2是目前比较流行的一款针对web页面测试的自动化测试工具,他的前身是Selenium .Selenium测试直接运行在浏览器中,就像真正的用户在操作一样.支持的浏览器包括IE.Mozi ...

最新文章

  1. 中国ATM龙头转型 全要素布局人工智能
  2. php laravel 框架 APP_KEY 的作用
  3. python绘制剖面图_干货!告诉你详细的剖面图绘图方法和步骤
  4. usb接口供电不足_电脑USB接口不够用?来试试ORICO条纹hub扩展器吧
  5. ps怎么清屏_PS:oracle恢复删除的数据
  6. C语言中使用静态函数的好处
  7. wechat code miniprogram 没有找到可以构建的 NPM 包
  8. 【数据湖加速篇】 —— 如何利用缓存加速服务来提升数据湖上机器学习训练速度
  9. SpringBoot自定义Filter
  10. 文本编辑软件哪个好_过年倒计时软件哪个好 过年倒计时软件推荐
  11. pythonapi异步_Python-FastAPI异步博客开发记录--异步篇
  12. 【无标题】快宝电子面单接口
  13. 重新学习《C++Primer5》第16章-模板与泛型编程
  14. 外星文明 未来计算机,科学家有望未来在地球“设计打印”外星生命
  15. leetcode — 46. 全排列(不含重复数字)
  16. 电商浪潮过后,无人零售会引领新零售的爆发吗
  17. hacks cheats injection
  18. Android调用系统相机拍摄视频以及获取缩略图
  19. 虚拟存储器 与虚拟内存详解
  20. Oo0代码混淆实现方法

热门文章

  1. Go语言如何自定义 linter(静态检查工具)
  2. 【blender建模功能】06 多边形建形工具
  3. php还款功能,智能还款的原理
  4. AMS1117的输入电压范围
  5. 使用simulink进行stm32开发1
  6. 鲍尔默评论谷歌退出中国事件
  7. 如何建设数据指标体系?
  8. 爬虫实战 | 采集可视化知乎问题的回答
  9. 雷神笔记本做java,详细爆料雷神911Air星战三代 15.6寸笔记本好不好用?怎么样呢?大神吐槽真心话...
  10. C++顺序栈的实现(进栈,出栈,判断栈空,打印输出,获取栈顶元素)