Python+Selenium2(上)
文章目录
- 一、Selenium2概述
- 1、概述
- 2、支持浏览器
- 3、支持语言
- 4、安装、卸载和查看
- 二、第一个自动化测试脚本
- 三、浏览器操作
- 四、常用元素定位
- 1、id定位:by_id
- 2、name定位:by_name
- 3、tag_name定位:by_tag_name
- 4、class_name定位:by_class_name
- 5、link_text定位:by_link_text
- 6、partial_link_text定位:by_partial_link_text
- 7、XPath定位:by_xpath
- 7.1、XPath概述
- 7.2、xpath绝对与相对定位
- 7.3、Xpath层级与逻辑定位
- 7.4、Xpath模糊匹配定位
一、Selenium2概述
1、概述
Webdriver (Selenium2)是一种用于Web应用程序的自动测试工具,它提供了一套友好的API,与Selenium 1(Selenium-RC)相比,Webdriver 的API更容易理解和使用,其可读性和可维护性也大大提高。
Webdriver完全就是一套类库,不依赖于任何测试框架,除了必要的浏览器驱动,不需要启动其他进程或安装其他程序,也不必像Selenium 1那样需要先启动服务
2、支持浏览器
Selenium可以支持多种浏览器,需要下载浏览器对应的驱动,如下图,点击可以跳转下载地址
浏览器 | 对应的驱动 |
---|---|
Firefox | geckodriver |
IE | IEDriverServer |
Chrome | chromedirver |
Safari | SafariDriver |
Opera | operadrive |
注意:
- 浏览器位数的版本和驱动版本要一致! 如果是32bit浏览器而Driver是64bit则会导致脚本运行失败
- Firefox
FireFox 48以上版本:Selenium 3.X +FireFox驱动——geckodriver
FireFox 48 以下版本:Selenium2.X 内置驱动
驱动下载地址https://github.com/mozilla/geckodriver/releases - IE浏览器
IE 9以上版本:Selenium3.X +IE驱动
IE 9以下版本:Selenium 2.X +IE驱动 - Chrome浏览器
selenium2.x/3.x +Chrome驱动
- 配置环境变量方法
- 如果需要经常用到多个浏览器,可以将下载的浏览器驱动统一放到电脑的某个盘的文件夹里,然后将文件夹路径配置到环境变量path中
- 可以将chromedriver与geckodriver驱动放在python的安装目录下面
- IE驱动特殊,除了把驱动放在python目录下,还要根据自己selenium版本下载对应版本的驱动,python的话,下载里面的IEDriverServerxxx.zip即可,需要注意的是,如果要打开IE浏览器的话,需要在浏览器的Internet选项中的安全页里有4个安全选项,Internet、本地Internet、受信任的站点、受限制的站点,这4个里面都有一个启用保护模式,都需要勾选上才可以
3、支持语言
Java,C#,PHP,Python,Perl,Ruby
本文介绍Selenium将基于Python
4、安装、卸载和查看
安装:pip install selenium==XXXX
卸载: pip uninstall selenium
查看版本号:pip show selenium
二、第一个自动化测试脚本
案例:1,启动谷歌浏览器; 2,打开百度首页,打印网页标题,等待2秒;3关闭浏览器
from selenium import webdriver
from time import sleep# 1,启动谷歌浏览器
driver = webdriver.Chrome()
# 2,打开百度首页,打印网页标题,等待2秒
driver.get('http://www.baidu.com')
print(driver.title)
sleep(2)
# 3,关闭浏览器
driver.quit()
三、浏览器操作
直接看代码
from selenium import webdriver
from time import sleepdriver=webdriver.Chrome()
driver.get('http://www.51zxw.net')
driver.maximize_window() #浏览器窗口最大化(最小化minimize_window)
sleep(2)
driver.get('http://www.51zxw.net/list.aspx?cid=651') #打开自学网课程页面
driver.set_window_size(400,800) #自定义浏览器窗口大小
driver.refresh() #刷新当前页面
sleep(2)
driver.back() #返回自学网主页
sleep(2)
driver.forward() #再前进到自学网课程页面
sleep(2)
driver.quit()
四、常用元素定位
Selenium八大元素定位:
和 id 有关的 : by_id
和 name 有关的 : by_name,by_class_name,by_tag_name
和 link 有关的: by_link_text,by_partial_link_text
全能也是最常用的:by_xpath 和 by_css_selector。
很多情况下,html 标签的属性不够规范,无法通过单一的属性定位,这个时候就只能使用 xpath 可以去重实现定位唯一 element,事实上定位最快的应当属于 by_id,因为 id 是唯一的,然而很多开发并没有设置 id
下面将通过案例来看一下八大元素定位方法的代码实现
1、id定位:by_id
from selenium import webdriver
from time import sleepdriver=webdriver.Chrome()
driver.get('http://www.baidu.com')
driver.find_element_by_id('kw').send_keys('selenium') #通过id定位输入框并输入‘selenium’
sleep(2)
driver.find_element_by_id('su').click()
sleep(3)
driver.quit()
2、name定位:by_name
from selenium import webdriver
from time import sleepdriver=webdriver.Chrome()
driver.get('http://www.baidu.com')
driver.find_element_by_name("wd").send_keys("Selenium") #通过name定位输入框并输入‘selenium’
sleep(2)
driver.find_element_by_id('su').click()
sleep(3)
driver.quit()
3、tag_name定位:by_tag_name
from selenium import webdriver
from time import sleepdriver=webdriver.Chrome()
driver.get('http://www.51zxw.net')
# 定位标签名为input的元素
# driver.find_element_by_tag_name('input').send_keys('selenium')
# 获取页面所有标签名称为“input”的标签(当页面有多个标签名都为imput时)
driver.find_elements_by_tag_name('input')[1].send_keys('selenium')
sleep(3)
driver.quit()#ps:一般一个页面会有非常多by_tag_name,使用[0][1]来定位会比较麻烦
# 故建议使用by_name来定位元素
4、class_name定位:by_class_name
from selenium import webdriver
from time import sleepdriver=webdriver.Chrome()
driver.get('http://www.baidu.com')
#定位标签名为class的元素
driver.find_element_by_class_name('s_ipt').send_keys('selenium')
sleep(3)
driver.find_element_by_id('su').click()
sleep(3)
driver.quit()
5、link_text定位:by_link_text
link_text、partial_link_text都是用来定位网页中的超链接,在HTML中表现形式为:
<a href="url">超链接载体</a>
from selenium import webdriver
from time import sleepdriver=webdriver.Chrome()
driver.get('http://www.baidu.com')
driver.find_element_by_link_text('新闻').click() #link_text精确匹配超链接
sleep(2)
driver.find_element_by_partial_link_text('hao').click() #partial_link_text模糊匹配超链接
sleep(3)
driver.quit()
6、partial_link_text定位:by_partial_link_text
from selenium import webdriver
from time import sleepdriver=webdriver.Chrome()
driver.get('http://www.baidu.com')
driver.find_element_by_partial_link_text('hao').click() #partial_link_text模糊匹配超链接
sleep(3)
driver.quit()
7、XPath定位:by_xpath
7.1、XPath概述
XPath即为XML路径语言,它是一种用来确定XML文档中某部分位置的语言。
XPath基于XML的树状结构,提供在数据结构树中找寻节点的能力。
7.2、xpath绝对与相对定位
- 绝对路径定位(不建议使用)
from selenium import webdriver
from time import sleepdriver=webdriver.Chrome()
driver.get('http://www.baidu.com')
# xpath绝对路径定位
driver.find_element_by_xpath('/html/body/div[1]/div[1]/div[5]/div/div/form/span[1]/input').send_keys('selenium')
sleep(2)
driver.find_element_by_id('su').click()
sleep(2)
driver.quit()
- 相对定位(利用元素属性定位,建议使用)
from selenium import webdriver
from time import sleepdriver=webdriver.Chrome()
driver.get('http://www.baidu.com')## 利用元素属性定位
# 定位到input标签中id为kw的元素
driver.find_element_by_xpath('//input[@id="kw"]').send_keys('python')# 定位input标签中name属性为wd的元素
# driver.find_element_by_xpath('//input[@name="wd"]').send_keys('selenium')# 定位input标签中class属性为s_ipt的元素
# driver.find_element_by_xpath('//input[@class="s_ipt"]').send_keys('软件测试')# 定位所有标签元素中,class属性为s_ipt的元素
# (用*通配符代表所有,但是有种风险就是一个页面中有相同的两个class标签的值相同时导致没法区分而报错)
# driver.find_element_by_xpath('//*[@class="s_ipt"]').send_keys('软件开发')driver.find_element_by_id('su').click()
sleep(2)
driver.quit()
ps:一般不建议使用绝对路径定位,如果HTML节点有做更改,之前设定好的绝对路径就会失效,脚本维护成本高
7.3、Xpath层级与逻辑定位
- 层级和属性结合定位
Xpath层级:如果一个元素,它的属性不是很明显,无法直接定位到,这时候我们可以先找它老爸(父元素),找到它老爸后,再找下个层级就能定位到了。要是它老爸的属性也不是很明显,就找它爷爷
Xpath索引:如果一个元素它的兄弟元素跟它的标签一样,这时候无法通过层级定位到。因为都是一个父亲生的,多胞胎兄弟。虽然多胞胎兄弟很难识别,但是出生是有先后的,于是可以通过它在家里的排行老几定位到,即用索引的方式定位。特别注意,Xpath索引是从1开始算起的!
from selenium import webdriver
from time import sleepdriver=webdriver.Chrome()
driver.get('http://www.baidu.com')
# 层级和属性结合定位--百度首页点击【视频】
driver.find_element_by_xpath("//*[@id='s-top-left']/a[4]").click()
sleep(2)
driver.quit()
- 逻辑运算组合定位
Xpath支持多个属性逻辑运算,运算方式有:与(and)、或(or)、非(not)。一般用的比较多的是and运算,同时满足两个属性
from selenium import webdriver
from time import sleepdriver=webdriver.Chrome()
driver.get('http://www.baidu.com')
#逻辑运算组合定位--百度首页点击【换一换】
driver.find_element_by_xpath("//*[@id='hotsearch-refresh-btn' and @class='hot-refresh c-font-normal c-color-gray2']").click()
sleep(2)
driver.quit()
ps:当标签名和属性名不唯一情况下建议使用逻辑组合定位
7.4、Xpath模糊匹配定位
- contains:匹配一个属性值中包含的字符串
- starts-with:匹配一个属性开始位置的关键字
- ends-with:匹配一个属性结束位置的关键字
- text():匹配文本信息,此处也可以用来做定位用
from selenium import webdriver
from time import sleepdriver=webdriver.Chrome()
driver.get('http://www.baidu.com')
# # contains定位
# driver.find_element_by_xpath("//input[contains(@id,'kw')]").clear()
# # starts-with定位
# driver.find_element_by_xpath("//input[starts-with(@name,'w')]").send_keys('selenium')
# # text()定位
driver.find_element_by_xpath("//div[text()='百度热榜']").click()
Xpath定位原则可以归纳为:
- 有唯一id,用id定位
- 文本元素定位
- 唯一属性定位
- 组合属性定位
- 找到比较好定位的元素,结合层级、轴定位
Python+Selenium2(上)相关推荐
- python实现文件下载-python实现上传下载文件功能
最近刚学python,遇到上传下载文件功能需求,记录下! django web项目,前端上传控件用的是uploadify. 文件上传 - 后台view 的 Python代码如下: @csrf_exem ...
- 线上学python哪家好-Python线上和线下培训哪个好?老男孩Python
学习Python对于很多人来说都是非常不错的选择,也是最合适的选择.想必不少人都知道,学习Python分为线上和线下两种模式,那么这两种模式有什么区别呢?我们简单的了解一下. 先来为大家介绍一下线上培 ...
- python自动源码_谷歌推出Tangent开源库,在Python源代码上做自动微分
原标题:谷歌推出Tangent开源库,在Python源代码上做自动微分 李林 编译自 Google Research Blog 谷歌今天推出了一个新的开源Python自动微分库:Tangent. 和现 ...
- python 文件上传下载,python实现上传下载文件功能
最近刚学python,遇到上传下载文件功能需求,记录下! django web项目,前端上传控件用的是uploadify. 文件上传 - 后台view 的 Python代码如下: @csrf_exem ...
- python第三方库文件传输_本地 Python 代码上传到 Python 第三方库(Pypi)
程序员对于编程都有自己的"套路",好的套路都会得到复用和 IT 界的传播.这时有一个疑问,怎样来实现呢?小编这里就准备介绍如何将自己写的 Python 包上传到 Python 官网 ...
- 当python遇上echarts (三)绘制3D图表
当python遇上echarts (二)绘制基本图表 文章目录 前言 3D图形配置项及方法 Grid3DOpts:三维笛卡尔坐标系配置项 Axis3DOpts:三维坐标轴配置项 add(): 共有的方 ...
- 在python平台上利用pymol来查找PDB文件中蛋白质的相互作用位点
这篇代码写的可能有点问题,大家如果有需要,去看另一篇吧.如果有啥不足,请批评指正. 在python平台上利用pymol来查找PDB文件中蛋白质的相互作用位点 关于蛋白质结合位点,查阅了很多篇文献,大多 ...
- 谁说QTP不能多线程 - 当Python遇上QTP
谁说QTP不能多线程 - 当Python遇上QTP 作者:Wally Yu (微博:http://weibo.com/quicktest) 经常有人问我一个问题:QTP可以同时做多个项目的自动化吗?我 ...
- 在网上购物竟然也能和Python扯上关系!电脑上用自己写的程序购物?别说,QT实现还真挺简单(Python如何利用QT制作电脑的手机版拼多多)
拼多多现在也是越来越火了,但是不知道大家有没有发现,拼多多似乎一直不能通过网页进行访问.淘宝,京东都有微信客户端,那么怎么拼多多就没有呢?带着这个疑问,我特地去手机爬取了一下拼多多的客户端.(其实也不 ...
- esp8266 刷 MicroPython固件,并使用MicroPython File Uploader python文件上传工具上传python文件
1.使用模块esp8266 2.进入固件官网:https://micropython.org/download/esp8266/ 3.将下载的esp8266-20220618-v1.19.1.bin放 ...
最新文章
- ASP.NET中WebForm组件CheckBoxList编程
- java计数器策略模式_策略模式与外观模式 | 学步园
- 关于path.join,path.resolve的详细介绍
- h5怎么加入php代码,HTML5主要新增标签的使用代码分享
- java wcf 未提供用户名_WCF的用户名密码认证
- java异常捕获常使用的语句_要点Java14 捕获异常
- boost::hana::fold_left用法的测试程序
- boost::hana::or_用法的测试程序
- spring事务管理之事务回滚的处理
- ropgadgets与ret2syscall技术原理
- iOS 翻译-UIWebView的基本简介-官方文档翻译
- VNC Viewer连接成功后闪退的解决办法
- PHP网络版CRM客户管理系统
- 关于个人博客的相关内容
- 如何安装linux和windows双系统
- Office - Excel如何查询重复值数量
- 计算机等级考试:IE地址栏不见了 怎么让消失了的IE地址栏神奇的再次出现。?
- 行存储和列存储的区别
- 短视频的海绵宝宝配音怎么制作?这可能是最容易上手的配音教程
- 美颜API是什么意思?美颜API和美颜SDK有什么区别?
热门文章
- 实用教程 | 如何查看微信朋友圈访客
- 文件服务器杀毒软件推荐,服务器杀毒软件哪个好 服务器装什么杀毒软件【详解】...
- STM32应用实例十四:利用光敏二极管实现光度测量
- Ajax 什么是Ajax? Ajax的基本语法
- 健身体测微信小程序,新手上路
- AppleScript(7) : 睡眠
- springboot选择题、判断题
- 最新版SEO优化指南:今年网站优化方案就靠它了!(基础版)
- 读取和讯博客数据可视化分析
- 铂链获美国顶级区块链投资基金 Draper Dragon Digital Fund投资