selenium环境+元素定位大法

01
PART
什么是 web ui 自动化

自动化测试是指通过自动化测试工具或其他手段,按照测试人员的测试计划进行自动测试,目的是减轻手工测试的工作量。

简单来说就是用代码模仿手工操作

1、集中注意点
测试自动化并不是为了赢得老板的赞赏,或者认为这是一个很潮的技术,不用就会落后,而是为了发现问题,提高产品的质量。

UI自动化测试应该集中在:

1)UI的文本,图片显示正确性

2)UI的交互逻辑正确性测试

3)UI上的用户行为正确性测试

2、难点
对比手工UI测试,UI自动化测试有如下的难点:

1)从UI测试的角度来说,一个非“预期”产生的缺陷很难被自动化测试发现,而手工测试则能轻松的发现这个缺陷;

2)UI本身的变化性,要想达到和手工测试相同的覆盖率,单纯的UI自动化测试往往很难证明自己的投资回报;

3)UI控件元素本身识别的复杂性;

4)UI自动化测试出现问题时,恢复到下一条测试case执行的场景是复杂的。因为出现这种问题的意外,是非“预期”的;

5)UI的测试case,有很多是关于用户交互方面的,而这方面也其一定的复杂性;

3、什么时候需要进行 ui 自动化测试
从本质上讲,非UI测试和UI测试,是互为补充的,根据其成本和特性的不同,在实际工程应用中也应该领会运用。其基本原则:非UI自动化测试用例为主,UI自动测试为必要的补充,考虑成本因素,UI自动测试可以被手动测试所取代

1)基本用户场景测试和验收确认(acceptance)测试用例

2)逻辑与用户界面绑定在的一起,无法绕过UI直接测试核心逻辑模块。

02
PART
selenium 与 webdriver

Selenium 是一个用于 Web 测试的工具,测试运行在浏览器中,就像真正的用户在手工操作一样。支持所有主流浏览器
这个工具的主要功能包括:
  1)测试与浏览器的兼容性 ,应用程序是否能够很好地工作在不同浏览器和操作系统之上
  2)测试系统功能,创建回归测试检验软件功能和用户需求

WebDriver 就是对浏览器提供的原生API进行封装,使其成为一套更加面向对象的Selenium WebDriver API。
使用这套API可以操控浏览器的开启、关闭,打开网页,操作界面元素,控制Cookie,还可以操作浏览器截屏、安装插件、设置代理、配置证书等

03
PART
HTML 扫盲运动

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

HTML 属性
HTML 元素可以设置属性
属性可以在元素中添加附加信息
属性一般描述于开始标签
属性总是以名称/值对的形式出现,比如:name=“value”
HTML 标准属性参考手册:https://www.runoob.com/tags/ref-standardattributes.html

04
PART
环境搭建

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

05
PART
使用 selenium 访问百度并搜索

反爬虫设置

from selenium import webdriver

options = webdriver.ChromeOptions()

设置为开发者模式,防止被各大网站识别出来使用了Selenium

屏蔽 windows.navigator.webdriver

options.add_experimental_option(‘excludeSwitches’, [‘enable-automation’])

# 不加载图片,加快访问速度

options.add_experimental_option(

“prefs”, {“profile.managed_default_content_settings.images”: 2})

driver = webdriver.Chrome(
executable_path="/Users/nathaniel/MyApp/lib/seleniumLib/chromedriver",
options=options)

driver.get(“https://www.baidu.com”)

driver.quit()

06
PART
ui 自动化操作流程
选择界面元素

根据元素的特征:ID,Name,Class,Tag,等

根据元素特征和关系:css,xpath

操作界面元素

输入操作:点击、输入文字、拖拽等

输出操作:获取元素的各种属性

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

07
PART
元素定位大法

find_element_by_id:通过ID进行匹配查找,只返回匹配到的一个元素
find_element_by_name:通过name进行匹配查找,只返回匹配到的一个元素
find_element_by_xpath:通过xpath进行匹配查找,只返回匹配到的一个元素
find_element_by_link_text:通过链接内容进行匹配查找,只返回匹配到的一个元素
find_element_by_partical_link_text:通过部分链接内容进行匹配查找,只返回匹配到的一个元素
find_element_by_tag_name:通过标签名称进行匹配查找,只返回匹配到的一个元素
find_element_by_class_name:通过class名称进行匹配查找,只返回匹配到的一个元素
find_element_by_css_selector:通过CSS选择器进行匹配查找,只返回匹配到的一个元素
值得注意的是,上面方法只会匹配查找只会获取第一个元素。除了上面这些查找单个元素的方法之外,Selenium还定义查找多个元素的方法:

find_elements_by_name:通过name进行匹配查找,返回所有匹配到的元素列表
find_elements_by_xpath:通过xpath进行匹配查找,返回所有匹配到的元素列表
find_elements_by_link_text:通过链接内容进行匹配查找,返回所有匹配到的元素列表
find_elements_by_partical_link_text:通过部分链接内容进行匹配查找,返回所有匹配到的元素列表
find_elements_by_tag_name:通过标签名称进行匹配查找,返回所有匹配到的元素列表
find_elements_by_class_name:通过class名称进行匹配查找,返回所有匹配到的元素列表
find_elements_by_css_selector:通过CSS选择器进行匹配查找,返回所有匹配到的元素列表
from selenium import webdriver
import time

创建浏览器驱动

driver = webdriver.Chrome(“D:\tool\selenium\chromedriver.exe”)

访问网址

driver.get(“D:\test\script\study\seleniumStu\day1\test.html”)

“”"

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

寻找元素

textElement = driver.find_element_by_css_selector(“body > div > p:nth-child(1)”)

打印元素的文本信息

print(textElement.text)
“”"

“”"

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

寻找元素

textElement = driver.find_element_by_xpath("[表情]ml/body/div/p[2]")

打印元素的文本信息

print(textElement.text)
“”"

“”"

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

寻找元素

inputElement = driver.find_element_by_id(“58680504-89fc-42d4-ab86-afc9456f880e”)
inputElement.send_keys(“荀尘”)
“”"

“”"

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

寻找元素

inputElement = driver.find_element_by_name(“passwd”)
inputElement.send_keys(“123”)
“”"

“”"

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

寻找元素

linkElement = driver.find_element_by_class_name(“mnavspdot”)
linkElement.click()
“”"

“”"

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

寻找元素

tagElement = driver.find_element_by_tag_name(“p”)

打印标签的文本内容

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(“p”)
for i in tagElementSli:
print(i.text)

根据 css 选择器获取元素列表

inputElement = driver.find_elements_by_css_selector(“body > div:nth-child(2) > input”)
for i in inputElement:
print(i.get_attribute(“name”))

除了 find_element_by_某某类型的定位方法(“元素定位表达式”), find_element() 函数也可以完成任务

from selenium import webdriver

需要先引入这个

from selenium.webdriver.common.by import By

driver = webdriver.Chrome()

inputElement = driver.find_element(By.ID, “58680504-89fc-42d4-ab86-afc9456f880e”)

同样也有对应的获取列表的方法

inputElementSli = driver.find_elements(By.NAME, “pwd”)

注意:

1、根据 class_name 进行定位的时候,有时候会遇到复合类,也就是 class 属性中间有空格,class 属性比较特殊,class属性中间的空格是间隔符号,表示的是一个元素有多个class的属性名称,此时元素定位的时候任取一个即可(不保证唯一定位)

2、selenium 没有提供判断元素是否存在的功能,所以当你需要判断一个元素存不存在的时候,直接定位可能会报错。我们可以去匹配一个元素列表,列表为空则元素不存在,列表不为空则元素存在

技巧,在进行元素定位的时候,有时会遇到一些特别难以定位的元素,此时你可以使用下边这种模式,分步骤定位,一步步缩小定位范围

ele = driver.find_elements_by_xpath("//div[@id=‘category-block’]//ol/li")
b = ele.find_elements_by_xpath(’.//li[@class=‘subcate-item’]//span’)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值