Selenium-断言和、S执行器和鼠标悬停

 

1 常见断言:

 1.1 封装

 1.2 for循环

 1.3 if判断

 如果这个元素在,我就xxxxx,如果这个元素不在,我就ccc

 如果这个数据存在,我就aaa,如果这个数据不存在我就bbb

 这一类型的内容,在自动化中是不存在的。

 因为所有的自动化测试行为的执行,都是基于已知结果来进行的。

 

2 断言的机制:

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

2.1 UI自动化中,断言是用来校验流程的正确性

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

断言就是判断本次测试是否达到预期结果。

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

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

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

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

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

断言只需要找到核心的内容,进行校验,就可以保证正确性,切忌贪多

例如:

进入一个系统,如果要走登录流程,校验是否登录成功的核心在于什么?

1. 提示登录成功!

2. 登录按钮不再显示在页面中

3. 一定会存在有退出

4. 一定会显示有登录成功后才可访问的功能

提取一个关键信息进行断言即可。因为断言多了,除了多写几行代码,其他没有任何意义。

 

PS:

通过webdriver创建的浏览器对象,默认是零缓存对象,也就意味着所有之前所缓存的内容,在这个对象中,都不存在。启动时不会加载本地缓存。

'''
    断言本身就是用来校验正确性的,你如果把错误给处理了,请问你怎么去知道对不对呢?
    断言本质上是预期结果与实际结果的匹配,那这个匹配当然是在最后再匹配的。
    在UI自动化中,断言是对流程的最终结果进行校验即可。中途可以通过显式等待做一些基本的校验,但是不推荐。
    自动化测试在一些特定情况下需要考虑到清理脏数据的操作。
'''
from selenium import webdriver

driver = webdriver.Chrome()
driver.implicitly_wait(10)
driver.get('http://39.98.138.157/shopxo/index.php?s=/index/user/logininfo.html')
driver.find_element('name', 'accounts').send_keys('xuzhu666')
driver.find_element('name', 'pwd').send_keys('123456')
driver.find_element('xpath', '//button[text()="登录"]').click()
# 获取退出按钮的文本
# 校验文本是否符合预期结果
assert driver.find_element('link text', '退出').text == '退出1', '断言失败'

 

 

3 验证码的处理:

3.1 直接找开发要万能验证码输入即可,或者找开发屏蔽验证码,解决验证码的问题。因为验证码的存在本身就是用来防止机器操作的。

3.2 如果实在要运行验证码,建议是在执行的时候预留等待时间,通过手动操作来实现。

 

4. 基本的JS命令:

4.1 innerHTML 查看text文本
4.2 setAttribute 设置元素属性
4.3 removeAttribute 移除元素属性
4.4 window.scrollTo(x,y)
4.5 arguments[0].scrollingElement.scrollTop=value 上下滑动
4.6 arguments[0].scrollIntoView(),element 精准滑动到指定元素

 

 1 '''
 2     Document对象,是前端中的顶梁柱。UI自动化的过程中操作的就是前端对象,对于一些特殊
 3     场景,可以通过document对象来进行处理
 4     作用:
 5         1. 定位元素。
 6         2. 通过Document修改元素属性,添加或者移除属性
 7         3. 滚动条操作:目前要么可以忽略,要么只能通过js来实现。
 8             滚动的比例记三个数值:
 9                 1. 0 表示最上方
10                 2. 500 表示中间
11                 3. 1000 表示末尾
12         4. 滚动到指定元素:
13             操作滚动条的目的就是为了将指定的元素显示出来,能够通过selenium进行定位与操作。
14     arguments是占位符,相对document更为灵活操作
15 '''
16 # 导入selenium模块
17 from time import sleep
18 
19 from selenium import webdriver
20 
21 # 启动浏览器:浏览器首字母要大写,还要添加()
22 driver = webdriver.Chrome()
23 # 访问url:一定要在url中添加http://这样的内容,如果不加会报错,必须加//
24 driver.get('http://www.baidu.com')
25 # 输入‘秋水好蠢’:通过find element函数查找元素,一定是查找有对应属性的元素
26 # driver.find_element_by_name('wd').send_keys('虚竹')
27 # # 点击‘百度一下’按钮实现搜索
28 # driver.find_element_by_id('su').click()
29 # 添加等待
30 sleep(3)
31 
32 # 滚动条操作js语句
33 # js = 'window.scrollTo(0,500)'
34 # # 通过js执行器来实现js语句的调用。
35 # driver.execute_script(js)
36 # el = driver.find_element('xpath', '//*[@id="10"]/h3/a')
37 # js精准定位到指定元素,并显示
38 # js = "arguments[0].scrollIntoView()"
39 # 调用js执行器
40 # driver.execute_script(js, el)
41 
42 # el = driver.find_element('xpath', '//*[@id="kw"]')
43 # # js修改元素属性
44 # js = 'arguments[0].removeAttribute("name")'
45 # driver.execute_script(js, el)
46 
47 el = driver.find_element('xpath', '//*[@id="s-top-left"]/a[1]')
48 # 通过js获取对象或者内容时,需要在原有的js语句上添加return
49 js = 'return arguments[0].innerHTML'
50 text = driver.execute_script(js, el)
51 print(text)

5. 鼠标悬停:

 

'''
    鼠标悬停:通过ActionChains类来实现悬停的操作行为。
'''
from time import sleep

from selenium import webdriver
from selenium.webdriver import ActionChains

driver = webdriver.Chrome()
driver.implicitly_wait(10)
sleep(3)
driver.maximize_window()
driver.get('http://www.baidu.com')
el = driver.find_element('xpath', '//span[text()="设置"]')
# 创建actions对象,进行悬停的操作。固定写法,在悬停的时候,鼠标不要乱动。避免出现问题
actions = ActionChains(driver)
actions.move_to_element(el).perform()
# 百度不是一个好百度。很多系统里会出现有报错,提示元素无法进行click交互
# el.click()
driver.find_element('link text', '搜索设置').click()
# 截图:自己写路径进行文件保存
driver.save_screenshot('./img/1.png')

 

posted @ 2021-09-03 17:28  术科术  阅读(208)  评论(0编辑  收藏  举报