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')
本文来自博客园,作者:术科术,转载请注明原文链接:https://www.cnblogs.com/shukeshu/p/15224071.html