python+Selenium自动化测试——输入,点击操作


Posted in Python onMarch 06, 2020

这是我的第一个真正意思上的自动化脚本。

1、练习的测试用例为:

打开百度首页,搜索“胡歌”,然后检索列表,有无“胡歌的新浪微博”这个链接 2、在写脚本之前,需要明确测试的步骤,具体到每个步骤需要做什么,既拆分测试场景,考虑好之后,再去写脚本。

此测试场景拆分如下:

1)启动Chrome浏览器

2)打开百度首页,https://www.baidu.com

3)定位搜索输入框,输入框元素XPath表达式://*[@id=”kw”]

4)定位搜索提交按钮(百度一下)://*[@id=”su”]

5)在搜索框输入“胡歌”,点击百度一下按钮

6)在搜索结果列表判断是否存在“胡歌的新浪微博”这个链接

7)退出浏览器,结束测试

【注】chrome获取XPath路径步骤如下:

1)在你打开的网页(如:百度首页),按F12,弹出如下窗口

python+Selenium自动化测试——输入,点击操作

2)点击左上角箭头按钮(或Ctrl + Shift + C),此时可以在页面上移动光标,查看对应的代码,如移动到百度搜索框,显示如下:

python+Selenium自动化测试——输入,点击操作

点击一下,对应代码就会选中

python+Selenium自动化测试——输入,点击操作

然后,右击copy?>copy path 复制到XPath路径。

3、代码如下:

import time
from selenium import webdriver

'''
测试用例:打开百度首页,搜索“胡歌”,然后检索列表,有无“胡歌的新浪微博”这个链接
场景拆分:
 1)启动Chrome浏览器
 2) 打开百度首页,https://www.baidu.com
 3)定位搜索输入框,输入框元素XPath表达式://*[@id="kw"]
 4)定位搜索提交按钮(百度一下)://*[@id="su"]
 5)在搜索框输入“胡歌”,点击百度一下按钮
 6)在搜索结果列表判断是否存在“胡歌的新浪微博”这个链接
 7)退出浏览器,结束测试
'''
driver = webdriver.Chrome()
driver.maximize_window()
driver.implicitly_wait(8) # 设置隐式等待时间

driver.get("https://www.baidu.com") # 地址栏里输入网址
driver.find_element_by_xpath('//*[@id="kw"]').send_keys("胡歌") # 搜索框输入胡歌
driver.find_element_by_xpath('//*[@id="su"]').click() # 点击百度一下按钮

time.sleep(2) # 等待2秒
# 通过元素XPath来确定该元素是否显示在结果列表,从而判断“壁纸”这个链接是否显示在结果列表
# find_element_by_link_text当找不到此链接时报错,程序停止
driver.find_element_by_link_text('胡歌的新浪微博').is_displayed()
driver.quit()

补充知识:python + selenium自动化测试--页面操作

1、刷新当前页面

.refresh()

# 刷新当前页面
driver.refresh()

2、获取本页面的URL

.current_url

用处:

一般URL可以帮助我们判断跳转的页面是否正确,或者URL中部分字段可以作为我们自动化测试脚本期待结果的一部分。

print(driver.current_url)

3、页面标题

获取当前页面标题

.title

# 获取当前页面标题显示的字段
print(driver.title)

断言页面标题

# 1) 包含判断
# assert:断言,声称
try:
 assert "百度一下" in driver.title
 print("断言测试成功.")
except Exception as e:
 print("断言失败.",format(e))

# 2) 完全相等判断
if "百度一下,你就知道" == driver.title:
 print("成功.")
else:
 print("失败.")

print(driver.title)

4、新建标签页

用js实现如下:

try:
 # 新标签页,此处用js实现,在有些博客上显示使用
 # driver.find_element_by_tag_name('body').send_keys(Keys.CONTROL, 't')
 # 我这测试无效,原因不知,于是采用如下方法
 js = "window.open('http://www.acfun.cn/')"
 driver.execute_script(js)

 # 切换到新的窗口
 handles = driver.window_handles # 获取窗口句柄
 driver.switch_to.window(handles[-1]) # 切换到最后一个既最新打开的窗口

 # 先切换窗口再打开新网址,才是在新窗口打开网址,不然还是在原来的百度页面打开此网址
 driver.get('http://map.baidu.com/')

except Exception as e:
 print("发现异常,",format(e))

5、页面前进、后退

前进: .forward()

后退: .back()

driver.get("https://www.baidu.com")
time.sleep(2)
'''前进,后退'''
elem_news = driver.find_element_by_link_text("新闻").click() # 点击进入新闻
time.sleep(2)
driver.back() # 后退到百度首页
time.sleep(2)
driver.forward() # 从百度前进到新闻页
time.sleep(2)

6、获取浏览器版本号

.capabilities[‘version']

# 获取浏览器版本号
"""
 Creates a new session with the desired capabilities.

 :Args:
 - browser_name - The name of the browser to request.
 - version - Which browser version to request.
 - platform - Which platform to request the browser on.
 - javascript_enabled - Whether the new session should support JavaScript.
 - browser_profile - A selenium.webdriver.firefox.firefox_profile.FirefoxProfile object. Only used if Firefox is requested.
"""
print(driver.capabilities['version'])

以上这篇python+Selenium自动化测试——输入,点击操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python正则表达式re模块详解
Jun 25 Python
解析Python中的变量、引用、拷贝和作用域的问题
Apr 07 Python
python list元素为tuple时的排序方法
Apr 18 Python
python dataframe常见操作方法:实现取行、列、切片、统计特征值
Jun 09 Python
Python3编码问题 Unicode utf-8 bytes互转方法
Oct 26 Python
pycharm 取消默认的右击运行unittest的方法
Nov 29 Python
对python捕获ctrl+c手工中断程序的两种方法详解
Dec 26 Python
Python实现合并两个有序链表的方法示例
Jan 31 Python
Python爬虫运用正则表达式的方法和优缺点
Aug 25 Python
浅析python,PyCharm,Anaconda三者之间的关系
Nov 27 Python
Python基础之函数原理与应用实例详解
Jan 03 Python
关于python pygame游戏进行声音添加的技巧
Oct 24 Python
使用 Python ssh 远程登陆服务器的最佳方案
Mar 06 #Python
使用python执行shell脚本 并动态传参 及subprocess的使用详解
Mar 06 #Python
python解析xml文件方式(解析、更新、写入)
Mar 05 #Python
如何使用pandas读取txt文件中指定的列(有无标题)
Mar 05 #Python
python批量替换文件名中的共同字符实例
Mar 05 #Python
python批量修改xml属性的实现方式
Mar 05 #Python
python修改linux中文件(文件夹)的权限属性操作
Mar 05 #Python
You might like
解析PHP对现有搜索引擎的调用
2013/06/25 PHP
Thinkphp框架开发移动端接口(2)
2016/08/18 PHP
总结PHP如何获取当前主机、域名、网址、路径、端口和参数等
2016/09/09 PHP
PHP获取真实客户端的真实IP
2017/03/07 PHP
JavaScript脚本性能的优化方法
2007/02/02 Javascript
JavaScript Event学习第八章 事件的顺序
2010/02/07 Javascript
Jquery ui css framework
2010/06/28 Javascript
js弹出窗口之弹出层的小例子
2013/06/17 Javascript
基于js disabled="false"不起作用的解决办法
2013/06/26 Javascript
JQuery对id中含有特殊字符的转义处理示例
2013/09/06 Javascript
关于jQuery判断元素是否存在的问题示例探讨
2014/07/21 Javascript
JavaScript控制table某列不显示的方法
2015/03/16 Javascript
javascript产生随机数方法汇总
2016/01/25 Javascript
JS中正则表达式只有3种匹配模式(没有单行模式)详解
2016/07/28 Javascript
Bootstrap基本组件学习笔记之面板(14)
2016/12/08 Javascript
解决ie img标签内存泄漏的问题
2017/10/13 Javascript
利用Node.js检测端口是否被占用的方法
2017/12/07 Javascript
JavaScript 数组去重并统计重复元素出现的次数实例
2017/12/14 Javascript
关于react-router/react-router-dom v4 history不能访问问题的解决
2018/01/08 Javascript
p5.js入门教程之鼠标交互的示例
2018/03/16 Javascript
详解小程序缓存插件(mrc)
2018/08/17 Javascript
django模型中的字段和model名显示为中文小技巧分享
2014/11/18 Python
Python复数属性和方法运算操作示例
2017/07/21 Python
python正则实现计算器功能
2017/12/14 Python
只需7行Python代码玩转微信自动聊天
2019/01/27 Python
浅谈python3.6的tkinter运行问题
2019/02/22 Python
香港现代设计家具品牌:Ziinlife Furniture
2018/11/13 全球购物
什么情况下你必须要把一个类定义为abstract的
2013/01/06 面试题
家长给幼儿园的表扬信
2014/01/09 职场文书
《鸟的天堂》教学反思
2014/02/27 职场文书
篝火晚会策划方案
2014/05/16 职场文书
新手上路标语
2014/06/20 职场文书
教师节领导致辞
2015/07/29 职场文书
高中生综合素质评价范文
2015/08/18 职场文书
初中班级口号霸气押韵
2015/12/24 职场文书
oracle设置密码复杂度及设置超时退出的功能
2022/06/28 Oracle