断言是自动化测试中,最为基本也是最为核心的内容。
- UI自动化中,断言是用来校验流程的正确性
- 接口自动化中,断言是用来校验数据的正确性
所有的自动化测试都需要有成功或结果,所以需要在流程自动化执行的末尾,有一个校验的功能。就像是需要有一个预期结果与实际结果对比的行为。
- UI自动化下断言的行为,只需要在流程的末尾来执行即可。一般就只有一次断言就足够解决流程的自动化了。
- UI自动化中断言所选择的点,一定是具备有代表性的内容。 要关键核心的点才可以作为断言的依据。
- 在自动化体系中,断言是一种固定的形态,流程就是获取指定的内容,对内容进行判断,是否与预期相符合。
在python中通过很多种方法都可以实现断言的效果。
if else断言本质上的一种逻辑,常用的断言手段一般而言分为:
-
assert 在python中自带的关键字:基于表达式来进行断言
-
显式等待,判断元素是否存在。
-
通过if else,if则返回true,else则返回false
# 定义预期结果,并获取实际结果
expected = '预期结果'
reality = driver.find_element().text # 关键的断言关键字
assert expected == reality,'断言失败'
二、验证码的处理:
- 直接找开发要万能验证码输入即可,或者找开发屏蔽验证码,解决验证码的问题。因为验证码的存在本身就是用来防止机器 *** 作的。
- 如果实在要运行验证码,建议是在执行的时候预留等待时间,通过手动 *** 作来实现。
能够提供Selenium以外的 *** 作行为,来更好地满足我们自动化测试需求。因为selenium本身 *** 作的是页面的前端内容。在特殊的场景下,selenium很可能会在使用上被限制。这个时候就可以通过js执行器来完成需要的 *** 作行为。
所有的js执行器大体都是关联到document对象
- arguments[0].innerHTML=“无厘头新闻” 修改元素的文本
- document.getElementById(‘kw’).setAttribute(‘readonly’,‘true’) 设置元素只读属性
- document.getElementById(‘kw’).removeAttribute(‘name’) 移除name元素属性
- window.scrollTo(x,y) x表示横轴,横向滚动条;y表示纵轴,上下滚动条
- arguments[0].scrollingElement.scrollTop=value 上下滑动
- arguments[0].scrollIntoView(),确定位到元素,并聚焦在页面中显示
- JS执行器在实际执行过程中,如果想要获取执行结果,便于后续的使用,就一定要在js中添加return关键字
'''
document对象执行的常见函数:
1. removeAttribute(attribute_name) 移除指定对象的指定属性
2. setAttribute(attribute_name,value) 设置指定对象的指定属性和值
arguments[0] 在js中可以理解为是占位符,有且只能这么写。
滚动条 *** 作的核心在于元素的获取,不是在于玩弄滚动条:
window.scrollTo(x,y) x表示横轴,横向滚动条;y表示纵轴,上下滚动条
arguments[0].scrollIntoView() 精确定位到元素,并聚焦在页面中显示
JS执行器在实际执行过程中,如果想要获取执行结果,便于后续的使用,就一定要在js中添加return关键字
'''
from selenium import webdriver
driver = webdriver.Chrome()
driver.implicitly_wait(50)
# 通过修改webdriver属性为False,一定是在访问系统之前,在启动浏览器后第一步就是运行这个。
driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
"source": """
Object.defineProperty(navigator, 'webdriver', {
get: () => false
})
"""
})
driver.set_window_size(800, 300)
driver.get('http://www.baidu.com')
# 移除元素的属性
# js = "document.getElementById('kw').removeAttribute('name')"
# 通过占位符来实现selenium与document的关联
# el = driver.find_element('link text', '新闻')
# 定位元素,并修改元素的文本
# js = 'arguments[0].innerHTML="**新闻"
# 获取指定元素的文本信息
# js = 'return arguments[0].innerHTML="虚竹新闻"' # 意思就相当于是el.text
# 用于执行js语句的函数
# a = driver.execute_script(js, el)
# print(a)
driver.find_element('id', 'kw').send_keys('**')
driver.find_element('id', 'su')click()
el = driver.find_element('link text', '下一页 >')
# 定位元素,并在页面中心显示
js = 'arguments[0].scrollIntoView()'
driver.execute_script(js, el)
# 获取元素的指定属性值。
text = el.get_attribute('href')
print(text)
四、如何越过反爬虫设置:
# 通过修改webdriver属性为False,一定是在访问系统之前,在启动浏览器后第一步就是运行这个。
driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
"source": """
Object.defineProperty(navigator, 'webdriver', {
get: () => false
})
"""
})```
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)