1、环境搭建
python+pycharm+selenium+chorme+谷歌浏览器驱动
2、八大定位元素
Question:如果元素定位不到,是怎么去分析的?
(1)元素没有加载完成(2)框架中(3)元素不可用,不可读,不可见(4)动态属性,动态的DIV层
元素定位前提:需要定位的元素或它的属性必须唯一。
id,nme,class_name,xpath,csstag_name,link_text,partail_link_text
(1)id定位:driver.find_element(By.ID,"kw").send_keys("123")
(2)name定位:driver.find_element(By.NAME,"wd").send_keys("123")
(3)link_text定位:driver.find_element(By.LINK_TEXT,"新闻").click()
(4)partail_link_text定位:driver.find_element(By.PARTIAL_LINK_TEXT,"闻").click()
(5)xpath定位
相对路径://开头是相对路径
相对路径+索引定位:driver.find_element(By.XPATH,"//form/span[1]/input").send_keys("123")
相对路径+属性定位:driver.find_element(By.XPATH,"//input[@autocomplete='off']").send_keys("123")
相对路径+通配符定位:driver.find_element(By.XPATH,"//*[@id='kw']").send_keys("123")
【复制xpath的方式经常会出错】
相对路径+部分属性定位:
driver.find_element(By.XPATH,"//*[starts-with(@autocomplete,'off')]").send_keys("123")
driver.find_element(By.XPATH,"//*[substring(@autocomplete,2)='ff']").send_keys("123")
driver.find_element(By.XPATH,"//*[contains(@autocomplete,'off')]").send_keys("123")
相对路径+文本定位:
driver.find_element(By.XPATH,"//span[text()='按图片搜索']").get_attribute('class')
绝对路径:/开头是绝对路径
(6)css定位
绝对路径:不用
其他方式:通过id和class定位
通过属性定位
通过部分属性定位
查询子元素定位
查询兄弟节点定位
3、unittest使用方法
①新建一个类继承unittest.TestCase
②导入unit test
③写一个以test开头的方法
4、项目中常用
进入菜单框架:driver.switch_to.frame("menu-frame")
出框架:driver.switch_to.default_content()
下拉框:①sel = select(driver.find_element()) ②sel.select_by_value("")/sel.select_by_visible_text("")/sel.select_by_index("7")
弹窗:alert(只确定),confirm(有确定有取消),prompt(有确定有取消还可以输入值)
①ale = driver.switch_to.alert ②ale.accept/dismiss()
多选框:
5、设计模式(封装)——pom模式(page object model)+关键字驱动模式
pom模式:解决线性脚本的问题,解决代码不能重复利用的问题,解决后期维护问题
分三层:第一层基础层base,主要放selenium原生的方法
第二层页面对象层po,主要用于放页面的元素和页面的动作
第三层测试用例层,testcase存放测试用例以及测试数据
页面对象层调用基础层的方法,测试用例层调用页面对象层的方法
6、生成报告
使用unittest默认的测试用例的加载器去发现testcase目录下-py结尾的所有测试用例
suite = unittest.defaultTestLoader.discover("./testcase","test_login.py")
生成html报告文件
report_file = open("./report/reports.html","wb")
生成一个HTMLTestRunner运行器对象(必须下载一个文件HTMLTestRunner.py,放在python的lib目录下)
runner = HTMLTestRunner(stream=report_file,title="****",describation)
通过运行器运行测试用例
runner.run(suite)
7、断言
self.assertEqual()判断两个值是否相等
self.assertTrue()判断一个值是否为True
self.assertIn()判断一个值是否在另一个值里面