Selenium-断言和JS执行器

Selenium-断言和JS执行器,第1张

一、断言的机制:

断言是自动化测试中,最为基本也是最为核心的内容。

  • UI自动化中,断言是用来校验流程的正确性
  • 接口自动化中,断言是用来校验数据的正确性

所有的自动化测试都需要有成功或结果,所以需要在流程自动化执行的末尾,有一个校验的功能。就像是需要有一个预期结果与实际结果对比的行为。

  • UI自动化下断言的行为,只需要在流程的末尾来执行即可。一般就只有一次断言就足够解决流程的自动化了。
  • UI自动化中断言所选择的点,一定是具备有代表性的内容。 要关键核心的点才可以作为断言的依据。
  • 在自动化体系中,断言是一种固定的形态,流程就是获取指定的内容,对内容进行判断,是否与预期相符合。

在python中通过很多种方法都可以实现断言的效果。

if else断言本质上的一种逻辑,常用的断言手段一般而言分为:

  1. assert 在python中自带的关键字:基于表达式来进行断言

  2. 显式等待,判断元素是否存在。

  3. 通过if else,if则返回true,else则返回false

# 定义预期结果,并获取实际结果
expected = '预期结果'
reality = driver.find_element().text # 关键的断言关键字
assert expected == reality,'断言失败'
二、验证码的处理:
  • 直接找开发要万能验证码输入即可,或者找开发屏蔽验证码,解决验证码的问题。因为验证码的存在本身就是用来防止机器 *** 作的。
  • 如果实在要运行验证码,建议是在执行的时候预留等待时间,通过手动 *** 作来实现。
三、基本的JS命令:

能够提供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
    })
  """
})```

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/785794.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-04
下一篇 2022-05-04

发表评论

登录后才能评论

评论列表(0条)

保存