Selenium学习笔记(一)

一、什么是Web UI 自动化

  UI自动化测试,即通过模拟手动操作用户UI界面的方式,以代码方式实现自动操作和验证的一种自动化测试手段。分为Web端和App端,Web端以Selenium驱动web UI的自动化测试为主流。App端的appium,还有诸如uiautomator、espresso、robotium等等。
在这里插入图片描述

1.1 UI自动化的作用

  1)重复性的功能测试及验证
  2)避免疲惫操作时的人为测试遗漏
  3)通过UI自动化操作获取其他测试数据的能力

1.2 UI自动化的优缺点

优点:
  1)用例编写简单,降低上手门槛
  2)节省人工测试成本,提高功能测试、回归测试的测试效率
  3)保障软件质量的一种手段和方式

缺点:
  1)UI控件的频繁变更导致控件定位
  2)用例脚本的维护成本较高,投入和产出比例低
  3)元素定位的不稳定导致用例的效率和稳定性差

1.3 什么时候需要进行 ui 自动化测试

  从本质上讲,非UI测试和UI测试,是互为补充的,根据其成本和特性的不同,在实际工程应用中也应该领会运用。其基本原则:非UI自动化测试用例为主,UI自动测试为必要的补充,考虑成本因素,UI自动测试可以被手动测试所取代。
  1)基本用户场景测试和验收确认(acceptance)测试用例
  2)逻辑与用户界面绑定在的一起,无法绕过UI直接测试核心逻辑模块。

二、Selenium 与 Webdriver

在这里插入图片描述

  Selenium 是一个用于 Web 测试的工具,测试运行在浏览器中,就像真正的用户在手工操作一样。支持所有主流浏览器。
主要功能包括:
  1)测试与浏览器的兼容性 ,应用程序是否能够很好地工作在不同浏览器和操作系统之上
  2)测试系统功能,创建回归测试检验软件功能和用户需求
  
WebDriver 就是对浏览器提供的原生API进行封装,使其成为一套更加面向对象的Selenium WebDriver API。
使用这套API可以操控浏览器的开启、关闭,打开网页,操作界面元素,控制Cookie,还可以操作浏览器截屏、安装插件、设置代理、配置证书等

三、HTML 扫盲运动

3.1 HTML 元素语法

HTML 元素以开始标签起始
HTML 元素以结束标签终止
元素的内容是开始标签与结束标签之间的内容
某些 HTML 元素具有空内容(empty content)  <br>  比如这个,换行标签
空元素在开始标签中进行关闭(以开始标签的结束而结束)
大多数 HTML 元素可拥有属性
HTML 文档由嵌套的 HTML 元素构成

3.2 HTML 属性

HTML 元素可以设置属性
属性可以在元素中添加附加信息
属性一般描述于开始标签
属性总是以名称/值对的形式出现,比如:name="value"

HTML
标准属性参考手册:https://www.runoob.com/tags/ref-standardattributes.html

四、Selenium环境搭建

1、为 Python 安装 selenium模块:pip install selenium

2、下载对应浏览器驱动

  谷歌:Chromedriver

  http://npm.taobao.org/mirrors/chromedriver/

  版本对照表:https://blog.csdn.net/BinGISer/article/details/88559532

  火狐:Firefoxdriver

  https://github.com/mozilla/geckodriver/releases

  版本对照表:https://firefox-source-docs.mozilla.org/testing/geckodriver/Support.html

五、使用 selenium 访问百度并搜索

import time
from selenium import webdriver

# 创建浏览器驱动对象
driver = webdriver.Chrome('D:/Python38-32/chromedriver.exe')
# 访问网址
driver.get('http://www.baidu.com')
# 找到输入搜索输入框
inpele = driver.find_element_by_id('kw')
inpele.send_keys('淘宝')
# 找到搜索按钮
sEle = driver.find_element_by_id('su')
sEle.click()
# 强制等待10秒
time.sleep(10)

六、Web ui自动化操作流程

6.1 选择界面元素

根据元素的特征:ID,Name,Class,Tag,等
根据元素特征和关系:css,xpath

6.2 操作界面元素

输入操作:点击、输入文字、拖拽等
输出操作:获取元素的各种属性

6.3 根据界面上获取的数据进行分析和处理

七、元素定位八大方法

7.1 返回匹配到的一个元素

名称方法作用
idfind_element_by_id通过ID进行匹配查找,只返回匹配到的一个元素
namefind_element_by_name通过name进行匹配查找,只返回匹配到的一个元素
xpathfind_element_by_xpath通过xpath进行匹配查找,只返回匹配到的一个元素
link_textfind_element_by_link_text通过链接内容进行匹配查找,只返回匹配到的一个元素
partical_link_textfind_element_by_partical_link_text通过部分链接内容进行匹配查找,只返回匹配到的一个元素
tagfind_element_by_tag_name通过标签名称进行匹配查找,只返回匹配到的一个元素
classfind_element_by_class_name通过class名称进行匹配查找,只返回匹配到的一个元素
cssfind_element_by_css_selector通过CSS选择器进行匹配查找,只返回匹配到的一个元素

7.2 返回匹配到的元素列表

名称方法作用
namefind_elements_by_name通过name进行匹配查找,返回所有匹配到的元素列表
xpathfind_elements_by_xpath通过xpath进行匹配查找,返回所有匹配到的元素列表
link_textfind_elements_by_link_text通过链接内容进行匹配查找,返回所有匹配到的元素列表
partical_link_textfind_elements_by_partical_link_text通过部分链接内容进行匹配查找,返回所有匹配到的元素列表
tagfind_elements_by_tag_name通过标签名称进行匹配查找,返回所有匹配到的元素列表
classfind_elements_by_class_name通过class名称进行匹配查找,返回所有匹配到的元素列表
cssfind_elements_by_css_selector通过CSS选择器进行匹配查找,返回所有匹配到的元素列表

代码示例:

from selenium import webdriver
import time

# 创建浏览器驱动
driver = webdriver.Chrome("D:/Python38-32/chromedriver.exe")

# 访问网址
driver.get("http://www.baidu.com")

"""
# 元素定位的第一种方式  css_selector,根据 css 选择器定位

# 寻找元素
textElement = driver.find_element_by_css_selector("#form > span.bg.s_btn_wr")
# 打印元素的文本信息
print(textElement.text)
"""

"""
# 元素定位的第二种方式  xpath,根据 xpath 路径定位

# 寻找元素
textElement = driver.find_element_by_xpath("//*[@id='hotsearch-content-wrapper']/li[1]/a/span[2]")
# 打印元素的文本信息
print(textElement.text)
"""

"""
# 元素定位的第三种方式,根据 id 定位

# 寻找元素
inputElement = driver.find_element_by_id("kw")
inputElement.send_keys("代浩")
"""

"""
# 元素定位的第四种方式,根据 name

# 寻找元素
inputElement = driver.find_element_by_name("wd")
inputElement.send_keys("代浩")
"""

"""
# 元素定位的第五种方式,根据 class_name 定位

# 寻找元素
linkElement = driver.find_element_by_class_name("s_ipt")
linkElement.click()
"""

"""
# 元素定位的第六种方式,根据 tag_name 定位

# 寻找元素
tagElement = driver.find_element_by_tag_name("input")
# 打印标签的文本内容
print(tagElement.text)
"""

"""
元素定位的第七种方式,根据链接文本,精准搜索

# 寻找元素
linkElement = driver.find_element_by_link_text("抗击肺炎")
linkElement.click()
"""

"""
# 元素定位的第八种方式,根据链接文本,模糊搜索

# 寻找元素
linkElement = driver.find_element_by_partial_link_text("抗击")
linkElement.click()
"""

# 获取元素列表
tagElementSli = driver.find_elements_by_tag_name("a")
for i in tagElementSli:
    print(i.text)

# 根据 css 选择器获取元素列表
inputElement = driver.find_elements_by_css_selector("#s-top-left > a:nth-child(1)")
for i in inputElement:
    print(i.get_attribute("a"))

注意点:
  1、根据 class_name 进行定位的时候,有时候会遇到复合类,也就是 class 属性中间有空格,class 属性比较特殊,class属性中间的空格是间隔符号,表示的是一个元素有多个class的属性名称,此时元素定位的时候任取一个即可(不保证唯一定位)
  2、Selenium 没有提供判断元素是否存在的功能,所以当你需要判断一个元素存不存在的时候,直接定位可能会报错。我们可以去匹配一个元素列表,列表为空则元素不存在,列表不为空则元素存在

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值