selenium python学习笔记

* 切换至指定frame: driver.switch_to_frame(***)

情况1. 需要切换至的frame有id或name标记,则可以直接使用切换语句,如

driver.switch_to_frame('ifbg') #括号内填入iframe的id或name标记值均可

情况2. frame没有id或name标记,但有class标记,需要先获取到对应的frame,然后在切换至该frame

frame1 = driver.find_element_by_css_selector(".main-iframe")

driver.switch_to_frame(frame1)

* python实现selenium断言和验证

python实现selenium断言和验证

如验证百度搜索的标题是否为“123_百度搜索”

self.assertEqual(u"123_百度搜索",driver.title)

如要验证是否为false

self.assertFalse(driver.title)

如要验证是否为true

self.assertTrue(driver.title)

而验证为了保证失败也能正常运行下去,一般情况下都是在验证的基础上加异常捕获,如验证百度搜索的标题是否为“123_百度搜索”

try:

            self.assertEqual(u"1234_百度搜索", driver.title)

except AssertionError as e:

            print u"找不到这个标题"

self.assertIn(a,b) 判断a in b是否成立,正确则True,否则为False

self.assertNotIn(a,b) 判断a in b是否成立,不成立则True 否则 False

* python assert使用说明

self.assertEqual(a,b,msg=msg)   #判断a与1.b是否一致,msg类似备注,可以为空

self.assertNotEqual(a,b,msg=msg)  #判断a与b是否不一致

self.assertTrue(a,msg=none)    #判断a是否为True

self.assertFalse(b,msg=none)   #判断b是否为false

self.assertAlmostEqual(a,b,places=none,msg=none,delta=none)   #该判断过程有点复杂,判断过程如下

注:places与delta不能同时存在,否则出异常

  #若a==b,则直接输入正确,不判断下面的过程

  #若delta有数,places为空,判断a与b的差的绝对值是否<=delta,满足则正确,否则错误

  #若delta为空,places有数,判断b与a的差的绝对值,取小数places位,等于0则正确,否则错误

  #若delta为空,places为空,默认赋值places=7判断

例 assertAlmostEqual(2,2) 正确,

   assertAlmostEqual(5,2,delta=4) 正确

   assertAlmostEqual(5,2,delta=2) 错误

   assertAlmostEqual(2,2.005,places=1) 正确

   assertAlmostEqual(2,2.05,places=3) 错误

self.assertNotAlmostEqual(a,b,places=none,msg=none,delta=none)  同上,但判断相反

注,delta与places不能同时存在,否则抛出异常

例  assertNotAlmostEqual(2,2) 错误

assertNotAlmostEqual(a,b,delta=c)  #a不等于b 同时 a-b>c 则正确,否则错误

assertNotAlmostEqual(a,b,places=2)

#a不等于b 同时|b-a|*0,01 不等于0 则正确,否则错误

self.assertSequenceEqual  #有空在研究,源码很长

self.assertListEqual #有空研究

self.assertTupleEqual #有空在研究

self.assertSetEqual #有空在研究

self.assertIn(a,b) 判断a in b是否成立,正确则True,否则为False

例: assertIn(“2” in “23”)  成功

     assertIn(“1” in “23”)  失败

self.assertNotIn(a,b) 判断a in b是否成立,不成立则True 否则 False

例:assertIn(“2” in “23”)  失败

    assertIn(“1” in “23”)  成功

self.assertIs(a,b) 判断a 与b的对象是否相同,成立则True,否则False

注,判断是否同一对象  id(a) 若id相同,则为同一对象

例 a,b=1,1.0

   assertls(a,b)  失败

   a,b=1,1

   assertls(a,b)  成功

self.assertIsNot(a,b) 判断a 与b的对象是否相同,不成立True,否则False

self.assertDictEqual(a,b) #判断字典a和字典b是否相等,a,b为字典

self.assertDictContainsSubset

self.assertItemsEqual(a,b) #比较两字符串是否一致,同sorted(a)==sorted(b)

注:sorted排序,方法内部为,将a,b分别list,生成各自列表,在sorted排序在比对

self.assertMultiLineEqual(a,b) #比较a文本与b文本是否一致,即便多了个换行,也会区分

self.assertLess(a,b) #判断a<b 成立则通过,否则失败

self.assertLessEqual  #判断a<=b 成立则通过,否则失败

self.assertGreater  #判断a>b 成立则通过,否则失败

self.assertGreaterEqual  #判断a>=b 成立则通过,否则失败

self.assertIsNone(obj=””) #判断obj=None 成立则通过,否则失败

self.assertIsNotNone #判断obj=None 成立则失败,否则通过

self.assertIsInstance(a,b) #判断a的数据类型是否为b,isinstance(a,b) 成立则通过,否则失败

self.assertNotIsInstance  #判断同上相反

self.assertRaisesRegexp  #正则判断匹配,没仔细看,过程复杂

self.assertRegexpMatches(a,b) #正则匹配 同re.search(b,a)匹配有则成功,否则失败

注:a为匹配的正则表达式,必须字符型,b 为要匹配的内容

self.assertNotRegexpMatches #同上,判断相反

具体格式参见 help(’unittest‘) 的说明

* 下拉导航菜单点击报错处理exceptions.ElementNotInteractableException: Message: Element is not visible

方法一:

ActionChains(driver).click(aa).click(bb).perform()

方法二:

ActionChains(driver).move_to_element(aa).perform()

bb.click()

注:aa和bb为定位元素的动作,方法二只适合谷歌,IE依然会报错

* ActionChains方法列表

click(on_element=None) ——单击鼠标左键

click_and_hold(on_element=None) ——点击鼠标左键,不松开

context_click(on_element=None) ——点击鼠标右键

double_click(on_element=None) ——双击鼠标左键

drag_and_drop(source, target) ——拖拽到某个元素然后松开

drag_and_drop_by_offset(source, xoffset, yoffset) ——拖拽到某个坐标然后松开

key_down(value, element=None) ——按下某个键盘上的键

key_up(value, element=None) ——松开某个键

move_by_offset(xoffset, yoffset) ——鼠标从当前位置移动到某个坐标

move_to_element(to_element) ——鼠标移动到某个元素

move_to_element_with_offset(to_element, xoffset, yoffset) ——移动到距某个元素(左上角坐标)多少距离的位置

perform() ——执行链中的所有动作

release(on_element=None) ——在某个元素位置松开鼠标左键

send_keys(*keys_to_send) ——发送某个键到当前焦点的元素

send_keys_to_element(element, *keys_to_send) ——发送某个键到指定元素

* 浏览器导航页的返回、前进、刷新

driver.back()

driver.forward()

driver.refresh()

* 下拉菜单选中

mm = Select(driver.find_element_by_id('aaType'))

mm.select_by_index(2)

* 设置报告文件保存路径

report_path = os.path.dirname(os.path.abspath('.')) + '/test_report/'

* 获取系统当前时间

now = time.strftime("%Y-%m-%d %H.%M.%S", time.localtime(time.time()))

* 不同窗口之间的切换(handle)

获取当前页面句柄

driver.current_window_handle

获取所有页面窗口的句柄

aa = driver.window_handles

切换窗口

driver.switch_to_window(aa[1]) 或 driver.switch_to_window(aa[-1])

关闭窗口

driver.close()

回到主窗口

driver.switch_to_window(aa[0])

* addTest()逐个加载指定用例到测试套件中去

suite = unittest.TestSuite ()

suite.addTest (TestBdd ('test_ccc'))

suite.addTest (TestAdd ('test_aaa'))

runner= unittest.TextTestRunner ()

runner.run (suite)

注:TestBdd为类名,test_ccc为用例名

* 用makeSuite()方法,一次性加载一个类文件下所有测试用例到suite中去

suite = unittest.TestSuite(unittest.makeSuite(BaiduSearch))

runner=unittest.TextTestRunner()

runner.run(suite)

* 用discover()方法去加载一个路径下所有的测试用例

suite = unittest.TestLoader().discover("testsuites")

runner=unittest.TextTestRunner()

runner.run(suite)

* 自动化测试报告的生成

# 设置报告文件保存路径

report_path = os.path.dirname(os.path.abspath('.')) + '/test_report/'

# 获取系统当前时间

now = time.strftime("%Y-%m-%d %H.%M.%S", time.localtime(time.time()))

# 设置报告名称格式

HtmlFile = report_path + now + "-HTMLtemplate.html"

fp=open(HtmlFile,'wb')

# 构建suite

suite = unittest.TestLoader().discover("testsuites")

 

if __name__ == '__main__':

    # 初始化一个HTMLTestRunner实例对象,用来生成报告

runner = HTMLTestRunner.HTMLTestRunner(stream=fp, title=u"某某项目测试报告", description=u"用例测试情况:" ,verbosity=2, tester='fyr',retry=1)

注: verbosity=2 表示每执行一个用例,就打印一下用例标题,方便查看执行进度

tester='fyr'  用例执行者

retry=1  用例失败后会重新跑一次

 

# runner = HTMLTestReport.HTMLTestRunner(stream=fp, title=u"自动化测试报告", description='自动化测试演示报告', tester='fyr')

    # 开始执行测试套件

runner.run(suite)

* 常见命令

adb start-server

netstat -ano | findstr "5037"

adb install c:\aa.apk

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值