Python中Selenium模块的使用详解


Posted in Python onOctober 09, 2020

Selenium的介绍、配置和调用

Selenium(浏览器自动化测试框架) 是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE(7, 8, 9, 10, 11),Firefox,Safari,Google Chrome,Opera等。这个工具的主要功能包括:测试浏览器的兼容性——测试你的应用程序看是否能够很好得工作在不同浏览器和操作系统之上。测试系统功能——创建回归测试检验软件功能和用户需求。支持自动录制动作和自动生成 .Net、Java、Perl等不同语言的测试脚本。

  • 框架底层使用JavaScript模拟真实用户对浏览器进行操作。测试脚本执行时,浏览器自动按照脚本代码做出点击,输入,打开,验证等操作,就像真实用户所做的一样,从终端用户的角度测试应用程序。
  • 使浏览器兼容性测试自动化成为可能,尽管在不同的浏览器上依然有细微的差别。
  • 使用简单,可使用Java,Python等多种语言编写用例脚本。

Selenium的配置

1、安装 Selenium模块:  pip  install  Selenium

2、下载浏览器驱动,Selenium3.x调用浏览器必须有一个webdriver驱动文件

Chrome驱动文件下载:点击下载chromedrive

Firefox 驱动文件下载 :点解下载geckodriver

下载之后,解压到任意目录(路径不要有中文)。

Selenium的调用

from selenium import webdriver

## 如果是chrome浏览器的驱动
driver=webdriver.Chrome("G:\Anaconda3-5.3.0\chromedriver.exe")

##如果是firefox浏览器的驱动
driver=webdriver.Firefox(executable_path="G:\Anaconda3-5.3.0\geckodriver.exe")

######如果浏览器驱动的目录加入了环境变量的话

## 如果是chrome浏览器的驱动
driver=webdriver.Chrome()

##如果是firefox浏览器的驱动
driver=webdriver.Firefox()

Selenium的使用 定位

Selenium提供了8种定位方式

1.id
2.name
3.class name
4.tag name
5.link text
6.partial link text
7.xpath
8.css selector

定位元素的使用

定位一个元素 定位多个元素 含义
find_element_by_id find_elements_by_id 通过元素id定位
find_element_by_name find_elements_by_name 通过元素name定位
find_element_by_class_name find_elements_by_class_name 通过classname进行定位
find_element_by_tag_name find_elements_by_tag_name 通过标签定位
find_element_by_link_text find_elements_by_link_tex 通过完整超链接定位
find_element_by_partial_link_text find_elements_by_partial_link_text 通过部分链接定位
find_elements_by_css_selector find_elements_by_css_selector 通过css选择器进行定位
find_element_by_xpath find_elements_by_xpath 通过xpath表达式定位

例如:

<html>
 <body>
   <form id="loginForm">
     <input name="username" type="text" classname="xie" id="key"/>
     <input name="password" type="password" 型号 />
     <input name="continue" type="submit" value="Login" />
     <input name="continue" type="button" value="Clear" />
   </form>
   <a href="http://www.baidu.com" rel="external nofollow" >百度一下</a>
 </body>
</html>

通过id进行定位第一个input框: find_element_by_id("key") 

通过name进行定位第一个input框:find_element_by_name("username")

通过classname进行定位第一个input框:find_element_by_class_name("xie")

通过标签tag进行定位input框:find_element_by_tag_name("input")    //这里input太多了,用input标签定位会出错

通过完整超链接定位a标签: find_element_by_link_text("百度一下")

用xpath进行定位:

用绝对路径进行定位,input[1]代表form下面的第一个input标签,从1开始, input=input[1]
driver.find_elemant_by_xpath("//html/body/form/input[1]")

用相对路径进行定位,form标签下的第一个input标签,[1]省略了
driver.find_element_by_xpath("//form/input")

用相对路径和属性进行定位,form标签下的input标签的name值等于username的标签
driver.find_element_by_xpath("//form/input[@name='username']")

其他的属性值如果太长,也可以采取模糊方法定位
例如页面中有这么一个标签  
<a href="http://www.baidu.com?name=admin&passwd=pass&action=login" rel="external nofollow" >百度一下</a>
则可以这么使用 
driver.find_element_by_xpath("//a[contains(@href,'login')]")

以上是普通的情况,存在可以定位的属性,当某个元素的各个属性及其组合都不足以定位时,我们可以利用其兄弟节点或者父节点等各种可以定位的元素进行定位,先看看xpath中支持的方法:

     1、child  选取当前节点的所有子元素

     2、parent  选取当前节点的父节点

     3、descendant选取当前节点的所有后代元素(子、孙等)

     4、ancestor  选取当前节点的所有先辈(父、祖父等)

     5、descendant-or-self选取当前节点的所有后代元素(子、孙等)以及当前节点本身

     6、ancestor-or-self  选取当前节点的所有先辈(父、祖父等)以及当前节点本身

     7、preceding-sibling选取当前节点之前的所有同级节点

     8、following-sibling选取当前节点之后的所有同级节点

     9、preceding   选取文档中当前节点的开始标签之前的所有节点

    10、following   选取文档中当前节点的结束标签之后的所有节点

    11、self  选取当前节点

    12、attribute  选取当前节点的所有属性

    13、namespace选取当前节点的所有命名空间节点

Python中Selenium模块的使用详解

上图实例,需要点击订单号为17051915200001的发货按钮,这时候不能直接定位到发货按钮,而是要先定位到订单号元素,再定位他的兄弟节点。参照上图,我们首先定位到td标签中包含订单号的td元素,然后选择其之后的同级节点,following-sibling,我们要找的元素在后面的第8个td标签下,因此定位可以写名为下面的格式

driver.find_element_by_xpath("//td[contains(text(),'17051915200001')]/following-sibling::td[8]/a[@class='link']")

但是如果页面中有两个相同的定位元素的话,我们这样使用就有可能会报错

比如有下面两个输入框,一个输入用户名的,一个输入密码的,但是 class 都是等于 inputclass 。这时,如果我们使用class_name 来定位元素的话,就会出现意想不到的错误

<input type="text" class="inputclass" name="username">
<input type="password"  class="inputclass" name="password"><br/>

#python代码
driver.find_element_by_class_name("inputclass").send_keys("admin")
driver.find_element_by_class_name("inputclass").send_keys("password")

我们的本意是在username框内输入admin,password框内输入 password 。但是由于两个框的 class 相同,而我们又是使用class_name进行元素的定位,所以我们所有的操作都会对第一个元素进行。 

Python中Selenium模块的使用详解

还有如果我们定位的元素页面没有的话,也会报错

比如我们使用这条语句用class_name来进行定位元素,但是当页面没有 class_name="aa" 的元素的话,就会报错,表示找不到通过 class name 方法找的元素 aa

driver.find_element_by_class_name("aa").send_keys("bb")

NoSuchElementException: no such element: Unable to locate element: {"method":"class name","selector":"aa"}

定位下拉标签元素 

Python中Selenium模块的使用详解

import Select
Select(driver.find_element_by_xpath("//select[@id='9560af43bfc949c4826d329c352e4eb6_class']")).select_by_index(4)  #定位公共互联网环境

在iframe框架之间切换 

Python中Selenium模块的使用详解

#切换到指定的iframe框架
driver.switch_to.frame("mainFrame") #切换iframe框架
driver.switch_to.default_content()  #切换到主框架

上传文件

上传文件使用的是AutoIt,安装好后,打开AutoIt Window Info,鼠标选中Finder Tool,然后鼠标左键按住拖到文件名框内,得到如图数据

Python中Selenium模块的使用详解

然后鼠标选中Finder Tool,鼠标左键按住拖到打开按钮,得到如图数据

Python中Selenium模块的使用详解

打开SciTE Script Editor,输入如下内容

Python中Selenium模块的使用详解

WinWait("CLASS:#32770","",5) #设置5秒用于等待上传窗口的显示
ControlFocus("打开","","Edit1") #把输入焦点定位到上传文本框中
ControlSetText("打开","","Edit1","C:\Users\17250\Desktop\1.txt") #输入文件路径
Sleep(5000)       #等待上传时间,单位毫秒
ControlClick("打开","","Button1"); #点击打开按钮,开始上传

保存为1.au3,点击Tools->Go运行。

然后打开Compile Script to .exe ,然后选中1.au3,它会自动将其转换为1.exe。

Python中Selenium模块的使用详解

在python中使用

os.system("C:\\Users\\17250\\Desktop\\1.exe")

Webdriver模块的使用

控制浏览器操作的一些方法 

方法 说明
set_window_size() 设置浏览器的大小
back() 控制浏览器后退
forward() 控制浏览器前进
refresh() 刷新当前页面
clear() 清除文本
send_keys (value) 模拟按键输入
click() 单击元素
submit() 用于提交表单
get_attribute(name) 获取元素属性值
is_displayed() 设置该元素是否用户可见
size 返回元素的尺寸
text 获取元素的文本

鼠标事件

在 WebDriver 中, 将这些关于鼠标操作的方法封装在 ActionChains 类提供。

方法 说明
ActionChains(driver) 构造ActionChains对象
context_click() 执行鼠标悬停操作
move_to_element(above) 右击
double_click() 双击
drag_and_drop() 拖动
move_to_element(above) 执行鼠标悬停操作
context_click() 用于模拟鼠标右键操作, 在调用时需要指定元素定位
perform() 执行所有 ActionChains 中存储的行为,可以理解成是对整个操作的提交动作

键盘事件

Selenium中的Key模块为我们提供了模拟键盘按键的方法,那就是send_keys()方法。它不仅可以模拟键盘输入,也可以模拟键盘的操作。

常用的键盘操作如下:

模拟键盘按键 说明
send_keys(Keys.BACK_SPACE) 删除键(BackSpace)
send_keys(Keys.SPACE) 空格键(Space)
send_keys(Keys.TAB) 制表键(Tab)
send_keys(Keys.ESCAPE) 回退键(Esc)
send_keys(Keys.ENTER) 回车键(Enter)

组合键的使用

模拟键盘按键 说明
send_keys(Keys.CONTROL,‘a') 全选(Ctrl+A)
send_keys(Keys.CONTROL,‘c') 复制(Ctrl+C)
send_keys(Keys.CONTROL,‘x') 剪切(Ctrl+X)
send_keys(Keys.CONTROL,‘v') 粘贴(Ctrl+V)
send_keys(Keys.F1…Fn) 键盘 F1…Fn

获取断言信息

不管是在做功能测试还是自动化测试,最后一步需要拿实际结果与预期进行比较。这个比较的称之为断言。通过我们获取title 、URL和text等信息进行断言。

属性 说明
title 用于获得当前页面的标题
current_url 用户获得当前页面的URL
text 获取搜索条目的文本信息

 参考文章:https://blog.csdn.net/weixin_36279318/article/details/79475388

到此这篇关于Python中Selenium模块的使用详解的文章就介绍到这了,更多相关Python Selenium模块使用内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python的Django框架中从url中捕捉文本的方法
Jul 20 Python
python中学习K-Means和图片压缩
Nov 20 Python
Python中pandas dataframe删除一行或一列:drop函数详解
Jul 03 Python
python实现定时发送qq消息
Jan 18 Python
为什么你还不懂得怎么使用Python协程
May 13 Python
Python 通过截图匹配原图中的位置(opencv)实例
Aug 27 Python
python是否适合网页编程详解
Oct 04 Python
flask 实现token机制的示例代码
Nov 07 Python
Python散点图与折线图绘制过程解析
Nov 30 Python
使用Tensorboard工具查看Loss损失率
Feb 15 Python
tensorflow保持每次训练结果一致的简单实现
Feb 17 Python
Python结合Window计划任务监测邮件的示例代码
Aug 05 Python
python利用platform模块获取系统信息
Oct 09 #Python
python smtplib发送多个email联系人的实现
Oct 09 #Python
python 决策树算法的实现
Oct 09 #Python
Python+unittest+requests 接口自动化测试框架搭建教程
Oct 09 #Python
Python实现http接口自动化测试的示例代码
Oct 09 #Python
python两种注释用法的示例
Oct 09 #Python
Python实现扫码工具的示例代码
Oct 09 #Python
You might like
Smarty安装配置方法
2008/04/10 PHP
php 下 html5 XHR2 + FormData + File API 上传文件操作实例分析
2020/02/28 PHP
javascript prototype原型操作笔记
2009/12/07 Javascript
jQuery写fadeTo示例代码
2014/02/21 Javascript
再谈javascript原型继承
2014/11/10 Javascript
JavaScript判断表单提交时哪个radio按钮被选中的方法
2015/03/21 Javascript
简述jQuery ajax的执行顺序
2016/01/05 Javascript
BootStrap实现响应式布局导航栏折叠隐藏效果(在小屏幕、手机屏幕浏览时自动折叠隐藏)
2016/11/30 Javascript
微信小程序实现全国机场索引列表
2018/01/31 Javascript
vue 关闭浏览器窗口的时候,清空localStorage的数据示例
2019/11/06 Javascript
详解Vscode中使用Eslint终极配置大全
2019/11/08 Javascript
jstree中的checkbox默认选中和隐藏示例代码
2019/12/29 Javascript
Python中针对函数处理的特殊方法
2014/03/06 Python
python基础教程之循环介绍
2014/08/29 Python
使用Python脚本来控制Windows Azure的简单教程
2015/04/16 Python
python中matplotlib实现最小二乘法拟合的过程详解
2017/07/11 Python
python删除列表元素的三种方法(remove,pop,del)
2019/07/22 Python
对python 树状嵌套结构的实现思路详解
2019/08/09 Python
Python模块/包/库安装的六种方法及区别
2020/02/24 Python
opencv python在视屏上截图功能的实现
2020/03/05 Python
工商管理本科毕业生求职信范文
2013/10/05 职场文书
歌唱比赛获奖感言
2014/01/21 职场文书
小学生学习感言
2014/03/10 职场文书
设备管理实施方案
2014/05/31 职场文书
爱护公共设施标语
2014/06/24 职场文书
火锅店的活动方案
2014/08/15 职场文书
机关作风整顿个人剖析材料
2014/10/06 职场文书
教师师德师风整改措施
2014/10/24 职场文书
学校党支部承诺书
2015/04/30 职场文书
2015年机关党委工作总结
2015/05/23 职场文书
手术室消毒隔离制度
2015/08/05 职场文书
4种非常实用的python内置数据结构
2021/04/28 Python
Django开发RESTful API实现增删改查(入门级)
2021/05/10 Python
FP-growth算法发现频繁项集——发现频繁项集
2021/06/24 Python
Vue OpenLayer测距功能的实现
2022/04/20 Vue.js
win10系统xps文件怎么打开?win10打开xps文件的两种操作方法
2022/07/23 数码科技