文章目录

  • 一、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

注意:

  1. 浏览器位数的版本和驱动版本要一致! 如果是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驱动
  1. 配置环境变量方法
  • 如果需要经常用到多个浏览器,可以将下载的浏览器驱动统一放到电脑的某个盘的文件夹里,然后将文件夹路径配置到环境变量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绝对与相对定位

  1. 绝对路径定位(不建议使用)
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()
  1. 相对定位(利用元素属性定位,建议使用)
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层级与逻辑定位

  1. 层级和属性结合定位
    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()
  1. 逻辑运算组合定位
    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模糊匹配定位

  1. contains:匹配一个属性值中包含的字符串
  2. starts-with:匹配一个属性开始位置的关键字
  3. ends-with:匹配一个属性结束位置的关键字
  4. 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定位原则可以归纳为:

  1. 有唯一id,用id定位
  2. 文本元素定位
  3. 唯一属性定位
  4. 组合属性定位
  5. 找到比较好定位的元素,结合层级、轴定位

Python+Selenium2(上)相关推荐

  1. python实现文件下载-python实现上传下载文件功能

    最近刚学python,遇到上传下载文件功能需求,记录下! django web项目,前端上传控件用的是uploadify. 文件上传 - 后台view 的 Python代码如下: @csrf_exem ...

  2. 线上学python哪家好-Python线上和线下培训哪个好?老男孩Python

    学习Python对于很多人来说都是非常不错的选择,也是最合适的选择.想必不少人都知道,学习Python分为线上和线下两种模式,那么这两种模式有什么区别呢?我们简单的了解一下. 先来为大家介绍一下线上培 ...

  3. python自动源码_谷歌推出Tangent开源库,在Python源代码上做自动微分

    原标题:谷歌推出Tangent开源库,在Python源代码上做自动微分 李林 编译自 Google Research Blog 谷歌今天推出了一个新的开源Python自动微分库:Tangent. 和现 ...

  4. python 文件上传下载,python实现上传下载文件功能

    最近刚学python,遇到上传下载文件功能需求,记录下! django web项目,前端上传控件用的是uploadify. 文件上传 - 后台view 的 Python代码如下: @csrf_exem ...

  5. python第三方库文件传输_本地 Python 代码上传到 Python 第三方库(Pypi)

    程序员对于编程都有自己的"套路",好的套路都会得到复用和 IT 界的传播.这时有一个疑问,怎样来实现呢?小编这里就准备介绍如何将自己写的 Python 包上传到 Python 官网 ...

  6. 当python遇上echarts (三)绘制3D图表

    当python遇上echarts (二)绘制基本图表 文章目录 前言 3D图形配置项及方法 Grid3DOpts:三维笛卡尔坐标系配置项 Axis3DOpts:三维坐标轴配置项 add(): 共有的方 ...

  7. 在python平台上利用pymol来查找PDB文件中蛋白质的相互作用位点

    这篇代码写的可能有点问题,大家如果有需要,去看另一篇吧.如果有啥不足,请批评指正. 在python平台上利用pymol来查找PDB文件中蛋白质的相互作用位点 关于蛋白质结合位点,查阅了很多篇文献,大多 ...

  8. 谁说QTP不能多线程 - 当Python遇上QTP

    谁说QTP不能多线程 - 当Python遇上QTP 作者:Wally Yu (微博:http://weibo.com/quicktest) 经常有人问我一个问题:QTP可以同时做多个项目的自动化吗?我 ...

  9. 在网上购物竟然也能和Python扯上关系!电脑上用自己写的程序购物?别说,QT实现还真挺简单(Python如何利用QT制作电脑的手机版拼多多)

    拼多多现在也是越来越火了,但是不知道大家有没有发现,拼多多似乎一直不能通过网页进行访问.淘宝,京东都有微信客户端,那么怎么拼多多就没有呢?带着这个疑问,我特地去手机爬取了一下拼多多的客户端.(其实也不 ...

  10. esp8266 刷 MicroPython固件,并使用MicroPython File Uploader python文件上传工具上传python文件

    1.使用模块esp8266 2.进入固件官网:https://micropython.org/download/esp8266/ 3.将下载的esp8266-20220618-v1.19.1.bin放 ...

最新文章

  1. ASP.NET中WebForm组件CheckBoxList编程
  2. java计数器策略模式_策略模式与外观模式 | 学步园
  3. 关于path.join,path.resolve的详细介绍
  4. h5怎么加入php代码,HTML5主要新增标签的使用代码分享
  5. java wcf 未提供用户名_WCF的用户名密码认证
  6. java异常捕获常使用的语句_要点Java14 捕获异常
  7. boost::hana::fold_left用法的测试程序
  8. boost::hana::or_用法的测试程序
  9. spring事务管理之事务回滚的处理
  10. ropgadgets与ret2syscall技术原理
  11. iOS 翻译-UIWebView的基本简介-官方文档翻译
  12. VNC Viewer连接成功后闪退的解决办法
  13. PHP网络版CRM客户管理系统
  14. 关于个人博客的相关内容
  15. 如何安装linux和windows双系统
  16. Office - Excel如何查询重复值数量
  17. 计算机等级考试:IE地址栏不见了 怎么让消失了的IE地址栏神奇的再次出现。?
  18. 行存储和列存储的区别
  19. 短视频的海绵宝宝配音怎么制作?这可能是最容易上手的配音教程
  20. 美颜API是什么意思?美颜API和美颜SDK有什么区别?

热门文章

  1. 实用教程 | 如何查看微信朋友圈访客
  2. 文件服务器杀毒软件推荐,服务器杀毒软件哪个好 服务器装什么杀毒软件【详解】...
  3. STM32应用实例十四:利用光敏二极管实现光度测量
  4. Ajax 什么是Ajax? Ajax的基本语法
  5. 健身体测微信小程序,新手上路
  6. AppleScript(7) : 睡眠
  7. springboot选择题、判断题
  8. 最新版SEO优化指南:今年网站优化方案就靠它了!(基础版)
  9. 读取和讯博客数据可视化分析
  10. 铂链获美国顶级区块链投资基金 Draper Dragon Digital Fund投资