声明如下:个人学习笔记,可以作为复习参考等看一看,在此分享:
自动化测试(selenium)篇
①点击操作------.click()方法 是点击元素的正中心
②输入操作------.send_keys()方法
使用时先清楚原有内容:.clear() → 在进行输入操作
③获取元素内信息(属性名,ID内容)操作------.get_attribute()
eg:如获取输入框内未输入时显示的内容eg:print(element.get_attribute('placeholder'))
.get_attribute('outerHTML')获取整个HTML内容
.get_attribute('interHTML')获取属性内部HTML内容
页面最大化:driver.maximize_window()
CSS 表达式:
CSS Selector语法选择元素原理:
通过CSS选择单个元素的方法是:find_element(By.CSS_SELECTOR,'CSS Selector参数')
find_element(By.CSS_SELECTOR,'CSS Selector参数')
class用 --- .类名
ID用 --- #ID名
2.精确查找使用(限制范围):
① 使用“>”来层层套接,使得精准查找
②不使用“>”时,使用空格代替 “>” 表示前者内部所有元素都可查询到
比如要选择上面的a元素,就可以使用 [href="http://www.miitbeian.gov.cn"] 。
这个表达式的意思是,选择 属性href值为 http://www.miitbeian.gov.cn 的元素。
“和”:一次性选择俩个或两个以上的元素,使用 “ ,” 隔开
3.按照次序查找元素:
根据次序来选择元素节点
xxx>span:nth-child(1) 在xxx的子元素里找到第一个为span元素
xxx>span:nth-last-child(1) 在xxx子元素里找到倒数第一个为span元素
p:nth-of-type(2) 在所有元素里找到第二个且类型为p的元素
span:nth-of-type(3) 在所有元素里找到第三个且类型为span的元素
p:nth-last-of-type(4) 在所有元素里找到倒数第四个且类型为span的元素
p:nth-child(even) 找到第偶数个类型为p的元素
p:nth-child(odd) 找到第奇数个类型为p的元素
兄弟关系节点
选择 h3 后面紧跟着的兄弟节点 span。
这就是一种 相邻兄弟 关系,可以这样写 h3 + span 表示元素 紧跟关系的 是 加号
h3 + span:表示选择与 h3 紧跟着的span标签
h3 ~ span:表示选择 h3 后面所有的 span 标签
frame内部元素操作
(1)要想实现窗口切换,必须要先使用wd.switch_to.frame('frame1')或者wd.switch_to.frame(wd.find_element(By.TAG_NAME, "iframe")),这时就可操作frame元素内容了
当操作完了之后退出frame使用wd.switch_to.default_content()
切换到新的窗口
解释:在网页上操作的时候,我们经常遇到,点击一个链接 或者 按钮,就会打开一个 新窗口
当打开一个新的页面后,但我们的Webdriver内容还是指向(停留)在旧窗口里的,这是我们使用 wd.switch_to.window(handle) 来获取新窗口的内容
这时使用 window_handles 属性 ,该属性包括了浏览器里面所有的窗口句柄(句柄,可以想象成对应网页窗口的一个ID,)
eg:for handle in wd.window_handles:
先切换到该窗口
wd.switch_to.window(handle)
得到该窗口的标题栏字符串,判断是不是我们要操作的那个窗口
if 'Bing' in wd.title:
如果是,那么这时候WebDriver对象就是对应的该该窗口,正好,跳出循环,
break
代码的用意就是:
我们依次获取 wd.window_handles 里面的所有 句柄 对象, 并且调用 wd.switch_to.window(handle) 方法,切入到每个窗口,
然后检查里面该窗口对象的属性(可以是标题栏,地址栏),判断是不是我们要操作的那个窗口,如果是,就跳出循环。
在新窗口操作结束后,回到原窗口使用 mainWindow = wd.current_window_handle
wd.switch_to.window(mainWindow)
进行切换
selenium
选择框
(1)radio框:
radio框选择选项,直接用WebElement的click方法,模拟用户点击就可以了
(2)checkbox框:
对checkbox进行选择,也就是直接用WebElment的click()方法,模拟用户点击选择
①首先把已选中的选项,全部自动化点击一遍,确保都是未选状态
eg:
elements = wd.find_elements(By.CSS_SELECTOR,
'#s_checkbox input[name="teacher"]:checked')
for element in elements:
element.click()
wd.find_element(By.CSS_SELECTOR,
"#s_checkbox input[value='小雷老师']").click()
(3)select框:
select内标签不像radio框和checkbox框都是input元素,只是type不同而已,而select框里的标签为select,所有Selenium专门提供了一个Select类进行操作
①select_by_value
根据选项的 value属性值 ,选择元素。
②select_by_index
根据选项的 次序 (从1开始),选择元素
③select_by_visible_text
根据选项的 可见文本 ,选择元素。
④deselect_by_value
根据选项的value属性值, 去除 选中元素
⑤deselect_by_index
根据选项的次序,去除 选中元素
⑥deselect_by_visible_text
根据选项的可见文本,去除 选中元素
⑦deselect_all
去除 选中所有元素
※select单选框:
不管原来选的是什么,直接用Select方法选择即可。
※select多选框:
1.某几个选项,要注意去掉原来已经选中的选项
2.然后再通过 select_by_visible_text方法 选择 小雷老师 和 小凯老师。
eg:
导入Select类
from selenium.webdriver.support.ui import Select
创建Select对象
select = Select(wd.find_element(By.ID, "ss_multi"))
select.deselect_all()
select.select_by_visible_text("小雷老师")
select.select_by_visible_text("小凯老师")
冻结网站临时显示页面(移动光标时消失)
在 开发者工具栏 console 里面执行如下js代码:
setTimeout(function(){debugger}, 5000)
这句代码什么意思呢?
表示在 5000毫秒后,执行 debugger 命令
4.PO模式(page Object):
一般PO模式项目下设置三个package(包)分别是
- Base 用来存储元素定位、输入、点击(对象库层)
2.PageObject 用来存储元素操作方法,和记载页面(操作层)
3.TestCase 用来存储当前自动化的测试类(unittest,ddt,断言)(业务层)
eg:PO(三层):
对象库层
逻辑层
业务层
元素定位、输入、点击(导入webdriver)
对页面元素进行操作,以及加载页面(导入By,Base里面的BasePage包)
具体传参,对业务进行操作全部完成,以及断言,ddt数据驱动
在PO模式下截取当前页面的图片:
kaca = os.path.join(r'C:\Users\HP\Desktop', 'taobao.png') driver.save_screenshot(kaca)
步骤:导入OS包(import os)>>> 使用os.path.join方法输入kaca =(保存路径,命名)>>>driver.save_screenshot(kaca)
一般写在PO模式的PageObject包里
多条用例进行测试:
对每一条用例输入一条用例数据进行测试 如:
PO模式下设置智能等待时间
设置智能等待时间,这里设置为10秒
wait = WebDriverWait(driver, 10)
使用WebDriverWait和expected_conditions来等待某个元素出现
element = wait.until(EC.presence_of_element_located((By.ID, "my_element_id")))
Unittest测试完成生成HTML测试报告:
#在test_add.py的父文件夹同级创建test_report文件夹(run_test也在test_report文件夹下) import unittest from HTMLTestRunner import HTMLTestRunner if __name__ == '__main__': ToHtml = unittest.defaultTestLoader.discover('../test_case', pattern='test_add.py') with open('../test_report02/test01_add.html', 'wb') as f: runner = HTMLTestRunner(stream=f, title='Test Report', description='erp test', verbosity=2) runner.run(ToHtml)
以上为本人笔记,仅以参考
版权归原作者 uncle.619 所有, 如有侵权,请联系我们删除。