Selenium WEB UI自动化测试支持库的安装及使用

一. 安装部署

1. 客户端selenium库的安装

通过pip安装selenium库的命令:pip install selenium

  • Selenium可支持以下几种语言:java、csharp、python、ruby、php、js、perl
  • 使用国内镜像可提升下载速度:pip install selenium -i https://pypi.douban.com/simple/
  • pip安装出现异常,可尝试更新至最新版本再试,更新pip的命令:python -m pip install --upgrade pip

2. 下载对应浏览器的ChromeDriver驱动:

浏览器 下载地址
Chrome: https://sites.google.com/a/chromium.org/chromedriver/downloadshttp://npm.taobao.org/mirrors/chromedriver/
Edge: https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/
Firefox: https://github.com/mozilla/geckodriver/releases
Safari: https://webkit.org/bolg/6900/webdriver-support-in-safari-10/

ChromeDriver驱动版本需与本机已安装浏览器版本一致,下载前可先查看本机浏览器版本,然后下载正确的ChromeDriver驱动

不清楚如何选择对应版本请点我
注意事项:在使用Selenium编写自动化脚本时,需要调用该ChromeDriver,因此ChromeDriver驱动存放路径建议不要出现中文及空格


二.使用Selenium进行WEB UI自动化测试

前言

首先,我们得明白Selenium在整个WEB UI自动化测试中所扮演的角色

  1. 通过ChromeDriver调用浏览器打开需要测试的站点
  2. 定位要操作的元素
    2.1 通过ID定位
    2.2 通过class定位
    2.3 通过标签名定位
    2.4 通过xpath定位
  3. 操作已定位到的元素
    3.1 获取页面内容
    3.2 向选择的元素输入数据
    3.3 点击已定位元素
    3.4 拖拉定位元素
  • 到此处时,Selenium的使命就已经基本完成,后面处理数据及分析数据则由python来完成。

Selenium定位\操作

查找单个元素并返回元素
from selenium import webdriver
driver = webdriver.Chrome(r'd:\tools\webdriver\chromedriver.exe')
driver.get('http://music.baidu.com/top/new')
element = driver.find_element_by_id('songListWrapper')    # 根据ID查找

如果元素未找到则会抛出异常,如果结果有多个,也只返回最先找到的那一个

查找多个元素并返回元素列表
from selenium import webdriver
driver = webdriver.Chrome(r'd:\tools\webdriver\chromedriver.exe')
driver.get('http://music.baidu.com/top/new')
tip_to_taihe_box = driver.find_element_by_class_name('tipToTaihe-box')    #查找单个class元素,如果存在多个只返回第一个
span_list = tip_to_taihe_box.find_elements_by_tag_name('span')    #查找多个span,返回列表

如果元素未找到,会返回一个空列表(不会抛出异常)


查找元素以HTML格式字符串
强制等待
from selenium import webdriver
from time import sleep
driver = webdriver.Chrome(r'd:\tools\webdriver\chromedriver.exe')
driver.get('http://www.baidu.com')
sleep(3)               # 强制等待3秒再执行下一步
element = driver.find_element_by_id('kw')

注意:强制等待,其实就是time.sleep()方法,让程序暂停运行一定时间,时间过后继续运行。缺点:设置的时间太短,元素还没有加载出来同样会报错。设置时间太长,浪费时间,如果代码量大了,就会影响整体的运行速度了,所以尽量少用这个。

隐式等待
from selenium import webdriver
driver = webdriver.Chrome(r'd:\tools\webdriver\chromedriver.exe')
driver.get('http://www.baidu.com')
driver.implicitly_wait(10)      #后面的所有定位元素操作,每半秒进行一次,直到查找到元素,最长等待10秒(可自行定义)
element = driver.find_element_by_id('kw')

注意:隐式等待,是等待页面加载,即页面加载完成后才能执行后面的操作

显式等待
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
driver = webdriver.Chrome(r'd:\tools\webdriver\chromedriver.exe')
driver.implicitly_wait(10) # 隐式等待和显性等待可以同时用,等待的最长时间取两者之中最大的
driver.get('http://www.baidu.com')
try:    
    element = WebDriverWait(driver, 10).until(
                    EC.presence_of_element_located((By.ID, "kw")))
finally:    
    driver.quit()

注意:显式等待,是等待元素加载,即元素加载完成后就执行对该元素的操作

使用BeautifulSoup4 & html5lib 配合selenium获取到的html内容进行元素定位

使用BeautifulSoup4 & html5lib前必需先通过CMD安装这俩个库,BeautifulSoup4的具体操作,可以查看官方操作说明文档 ( Beautiful Soup 4.2.0 操作说明文档传送门 )

pip install beautifulsoup4    # 安装BeautifulSoup4库
pip install html5lib          # 安装html5lib库

导入BeautifulSoup4 & html5lib

from bs4 import BeautifulSoup
import html5lib

Html5lib如何配合BeautifulSoup4使用

from bs4 import BeautifulSoup
import html5lib
html = """
  <html>
    <head><title>我喜欢的音乐</title></head>
    <body>
      <p class='title'><b>歌曲TOP3</b></p>
      <p class='story'>以下是音乐的下载链接
      <a href='http://music.taihe.com/song/597854185' class='music' id='link1'>明智之举</a>
      <a href='http://music.taihe.com/song/596481670' class='music' id='link2'>如约而至</a>
      <a href='http://music.taihe.com/song/598740690' class='music' id='link3'>只要平凡</a>
      这三首TOP3的歌曲你们喜欢吗?</p>
      <p class='story'>...</p>
    </body>
  </html>
"""
soup = BeautifulSoup(html,'html5lib')    # 将html5lib解释器添加到BeautifulSoup4中
soup.title           # 获取html文档中的title标签元素
soup.title.name      # 获取html文档中的title标签元素的name属性
soup.tltle.text      # 获取html文档中的title标签元素的文本内容

CSS选择元素的方法 tag/id/class

CSS选择器参考手册

根据tag名
p {color:red;}
根据id名
#food {color:red;}
根据class
.vergetable {color:red;}
根据tag名和class组合写(如果多个)
span.vergetable {color:red;}

复选框选择( SELECT )

使用SELECT时需要先导入库

from selenium.webdriver.support.ui import Select
Select 模块(index)定位

通过 select 选项的索引来定位选择对应选项(从 0 开始计数),如选择第二个选项:select_by_index(1)

<select id="cardid" name="CARD">
  <option selected="" value="A">芯片卡</option>
  <option value="B">磁条卡</option>
</select>
Select 模块(value)定位

Select 模块里面除了 index 的方法,还有一个方法,通过选项的 value值来定位。每个选项,都有对应的 value 值:select_by_value(B)

<select id="cardid" name="CARD">
  <option selected="" value="A">芯片卡</option>
  <option value="B">磁条卡</option>
</select>
Select 模块(text)定位

直接通过选项的文本内容来定位,定位“磁条卡”:select_by_visible_text("磁条卡")

<select id="cardid" name="CARD">
  <option selected="" value="A">芯片卡</option>
  <option value="B">磁条卡</option>
</select>
# 导入Select库
from selenium.webdriver.support.ui import Select
# 获取select父元素
s= driver.find_element_by_id('cardid')
# 取消全部选择
select.deselect_all()
# 选择指定文本内容的复选框
select(s).select_by_index(1)    #通过index定位并选择
select(s).select_by_value(B)    #通过value定位并选择
select(s).select_by_visible_text('磁条卡')    #通过text定位并选择

select 里面方法除了上面介绍的三种,还有更多的功能如下
select_by_index() :通过索引定位
select_by_value() :通过 value 值定位
select_by_visible_text() :通过文本值定位
deselect_all() :取消所有选项
deselect_by_index() :取消对应 index 选项
deselect_by_value() :取消对应 value 选项
deselect_by_visible_text() :取消对应文本选项
first_selected_option() :返回第一个选项
all_selected_options() :返回所有的选项

XPath 定位元素方法

特殊定位方法

driver.find_element_by_xpath("//span[contains(text(),'hello')]")      """text值包含匹配"""
driver.find_element_by_xpath("//span[text()='新闻']")                 """text值绝对匹配"""

更多查看:XPath 语法参考手册
selenium使用XPath方法定位元素

from selenium import webdriver
driver = webdriver.Chrome(r'd:\tools\chromedriver.exe')
one_element = driver.find_element_by_xpath('//div[@id="myid"]')    # 单个定位
element_list = driver.find_elements_by_xpath('//div[@class="myclass"]')    # 多个定位(复数形式,返回列表)

end

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,482评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,377评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,762评论 0 342
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,273评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,289评论 5 373
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,046评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,351评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,988评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,476评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,948评论 2 324
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,064评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,712评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,261评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,264评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,486评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,511评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,802评论 2 345