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/downloads 或 http://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 = """
  
    我喜欢的音乐
    
      

歌曲TOP3

以下是音乐的下载链接 明智之举 如约而至 只要平凡 这三首TOP3的歌曲你们喜欢吗?

...

""" 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 模块(value)定位

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


Select 模块(text)定位

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


# 导入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

你可能感兴趣的:(Selenium WEB UI自动化测试支持库的安装及使用)