#推荐
WebUI自动化测试之Selenium学习笔记(一)

2021-05-07 1 1,106

1. Selenium与WebDriver简介
Selenium的好处是可以模拟用户操作,在浏览器上自动进行测试,功能测试时可以自动保存cookie等信息无需代码发送。webDriver本是selenium1的竞争对手,后来二者进行了整合,结合了各自的优势,形成了webdriver。

#python3.7
#引用
from selenium import webdriver
#浏览器有很多种,我用的是chrome
browser = webdriver.Chrome()

注意:调用Chrome需要下载Chromedrive.exe驱动放在python根目录下。
需要注意的是,一定要查看Chrome版本下载对应的驱动版本,否则运行代码时会导致浏览器无限重启报错。
贴一个国内ChromeDriver的下载镜像: https://npm.taobao.org/mirrors/chromedriver/

2. 基本语法

① 声明实例: browser = webdriver.Chrome()
② 打开网页: browser.get()
③ 查找元素: 定位页面中的元素,从而完成点击输入等操作

#打开网页
url = "https://www.baidu.com/"
browser = webdriver.Chrome()
browser.get(url)

#查找页面元素的方法:
element = browser.find_element_by_id()
element = browser.find_element_by_name()
element = browser.find_element_by_xpath()
element = browser.find_element_by_link_text()
element = browser.find_element_by_partial_link_text()
element = browser.find_element_by_tag_name()
element = browser.find_element_by_class_name()
element = browser.find_element_by_css_selector()

browser.close()

插件工具: Selenium为Chrome和Firefox提供了浏览器插件,可以用来记录浏览器的操作行为,并生成Python代码. 可以简化一部分工作量.https://www.selenium.dev/downloads/

① 与postman有一点类似,新建一个测试项目:

WebUI自动化测试之Selenium学习笔记(一)

② 测试用例录制后,选择Export导出

WebUI自动化测试之Selenium学习笔记(一)

③ 然后选择对应的导出语言

WebUI自动化测试之Selenium学习笔记(一)

以下是百度搜素首页为例进行元素的定位:

1、<input id="kw" name="wd" class="s_ipt" value="" maxlength="255" autocomplete="off">

2、<a href="http://news.baidu.com" rel="external nofollow"  name="tj_trnews" class="mnav">新闻</a>

3、<div class="bdbriimgtitle">更多产品</div>

对应的元素检索方法:

element = browser.find_element_by_id("kw")
element = browser.find_element_by_name("wd")
element = browser.find_element_by_xpath()
element = browser.find_element_by_link_text("新闻")
element = browser.find_element_by_partial_link_text("产品")
element = browser.find_element_by_tag_name("input")
element = browser.find_element_by_class_name("s_ipt")
element = browser.find_element_by_css_selector()
#关于find_element_by_xpath的使用方法,有通过元素属性定位,和通过绝对路径定位两种,推荐通过元素属性定位
#结尾有Xpath的语句结果说明
#选取所有属性id=kw的标签
element = browser.find_element_by_xpath(" //*[@id="kw"] ")
#选取所有属性class=s_ipt的标签
element = browser.find_element_by_xpath(" //*[@class="s_ipt"] ")
#使用条件组合
element = browser.find_element_by_xpath(" //*[@id="kw" and @class="s_ipt"]")
#选取所有属性maxlength=255的input标签
element = browser.find_element_by_xpath(" //input[@maxlength="255"] ")
#通过绝对路径定位
#说明:div[2]表示第二个 div 标签
element = find_element_by_xpath("/html/body/div/div[2]/div/div/div/from/span[2]/input")
#关于tag_name的使用方法,tag_name就是每个元素的标签名:
# coding="utf-8"
 
from selenium import webdriver
import os,time
 
driver = webdriver.Chrome()
#path.abspath()方法用于获取当前路径下的文件
file_path = "file:///" + os.path.abspath("checkbox.html")
print(file_path)
driver.get(file_path)
 
#选择页面上所有的tag name为input的元素
inputs = driver.find_elements_by_tag_name("input")
 
#然后从中过滤出type为checkbox的元素,单击勾选
for i in inputs:
    if i.get_attribute("type") == "checkbox":
        i.click()
        time.sleep(5)
 
driver.quit()

3. Xpath定位方法

1. XPath路径表达式:

表达式 描述
nodeName 选取此节点的所有子节点。
/ 从根节点选取该元素。
// 选取匹配当前名称的所有节点,不考虑节点位置。
. 选取当前节点。
. . 选取当前节点的父节点。
@ 选取属性。

举个例子:

表达式 描述
bookStore 选取bookStore元素的所有子节点。
/bookStore 选取名为bookStore的根元素。
bookStore/book 选取bookStore下的所有book元素。
//book 选取所有book元素,而不管他们在文档中的位置。
bookStore//book 选取bookStore下的所有book元素,而不管他们在bookStore中位置。
//@languane 选取名为language的所有属性。

2. XPath谓语用法:

表达式 结果
/bookStore/book[1] 选取属于 bookStore 子元素的第一个 book 元素。
/bookStore/book[last()] 选取属于 bookStore 子元素的最后一个 book 元素。
/bookStore/book[last() – 1] 选取属于 bookStore 子元素的倒数第二个 book 元素。
/bookStore/book[position() < 3] 选取属于bookStore book 子元素的前两个book元素。
//title[@lang] 选取拥有名为lang属性的title元素。
//title[@lang=‘eng’] 选取lang属性为eng的title元素
/bookStore/book[price>35.00] 选取bookStore下的book元素,且book元素中的price元素值大于35.00
/bookStore/book[price>35.00]//title 选取bookStore中price大于35的book元素下的所有title元素

3. 匹配未知节点:

通配符 描述
* 匹配任何元素节点。
@* 匹配任何属性节点。
node() 匹配任何类型的节点。

举个例子:

路径表达式 描述
/bookstore/* 选取 bookstore 元素下的所有子元素。
//* 选取文档中的所有元素
//title[@*] 选取所有带属性的title元素

麋鹿网 Web自动化测试 WebUI自动化测试之Selenium学习笔记(一) https://www.miluwang.cn/337.html

学测试就到麋鹿网

上一篇:

已经没有上一篇了!

相关文章

评论
暂无评论