上善若水,不进则退

姚毛毛

左手代码,右手写诗

linuxido.com

selenium2自动化测试学习笔记(四)

今天是学习selenium2第四天。总结下今天的学习成果,自动登录网易邮箱并写信发送邮件。

知识点or坑点:

1、模块化编写测试模块(类似java里的抽象方法,js的函数编写)

from 包名 import 类

调用def定义的方法

2、xpath怎么获取包含部分文本的标签

#获取写信按钮:先获取包含‘写’字的span,再取它的上级li
xx = driver.find_element_by_xpath('//span[contains( text(),"写" )]/parent::li')

1)contains方法为部分包含,模糊查找;(开始找“写信”两个字始终没找到,因为其实文本是“写 信”,坑)
2)python的xpath获取text方法比较特殊,其他属性都是“@属性”获取,文本却是用text()""
3)父节点获取使用parent::

参考原文链接:http://blog.csdn.net/TestLearner/article/details/75569388

3、无法用id、name定位到iframe时,怎么定位frame

#利用xpath获取frame 再switch_to
        frame = driver.find_element_by_xpath("//iframe[@class='APP-editor-iframe']")
        driver.switch_to.frame(frame)

  1) driver.switch_to.frame('ID'),driver.switch_to.frame('name')都可以定义子frame,然后就可以操作frame内元素了

  2)在无法正常获取frame内元素时,可使用sleep(秒)方法多等待一会,设置1秒一般就够了(坑)

 

大家都是程序员,以下就贴代码了

首先是模块化编写public包,定义一个class:

 1 from time import sleep
 2 
 3 class Login():
 4     
 5     #登录
 6     def user_login(self,driver):
 7         username = 'testuser'#邮箱用户名
 8         pwd = 'testpwd123'#密码
 9         emailInput = driver.find_element_by_name("email")
10         emailInput.clear()
11         #emailInput.send_keys(username)#火狐执行无效
12         email_id = emailInput.get_attribute("id")
13         js = 'document.getElementById("'+email_id+'").value="'+username+'"'
14         print(js)
15         driver.execute_script(js)#执行js
16         pwdInput = driver.find_element_by_name("password")
17         pwdInput.clear()
18         pwdInput.send_keys(pwd)
19         dologin = driver.find_element_by_id("dologin")
20         dologin.click()
21 
22     #退出
23     def user_logout(self,driver):
24         driver.find_element_by_link_text("退出").click()
25         driver.quit()
26 
27     #写信
28     def write(self,driver):
29         #获取写信按钮:先获取包含‘写’字的span,再取它的上级li
30         xx = driver.find_element_by_xpath('//span[contains( text(),"写" )]/parent::li')
31         sx = driver.find_element_by_xpath('//span[contains( text(),"收" )]/parent::li')
32         print('写:',xx.text,'--收:',sx.text)
33         print('写:',xx.get_attribute('class'),'--收:',sx.get_attribute('class'))
34         xx.click()
35 
36         #收件人
37         sjr = driver.find_element_by_xpath('//input[@class="nui-editableAddr-ipt"]')
38         sjr.clear()
39         #sjrId = sjr.get_attribute('id')
40         #js = 'document.getElementById('+sjrId+').innerText=448671246@qq.comWW'
41         #driver.execute_script(js)
42         sjr.send_keys('448671246@qq.com')
43         
44 
45         #主题
46         zt = driver.find_element_by_xpath('//div[@class="bz0"]/div/input[@class="nui-ipt-input"]')
47         #print( len(zt) )
48         zt.send_keys('我是主题')
49 
50         #利用xpath获取frame 再switch_to
51         frame = driver.find_element_by_xpath("//iframe[@class='APP-editor-iframe']")
52         driver.switch_to.frame(frame)
53 
54         #等待1秒,再获取frame内容
55         sleep(2)
56         
57         #内容
58         bd = driver.find_element_by_xpath('//body[@class="nui-scroll"]')
59         bd.send_keys('我是测试内容002')
60 
61         #返回主页面后,需要等待一下,否则可能定位不到元素
62         driver.switch_to.default_content()
63         sleep(2)
64 
65         #随便选择一个发送按钮,点击发送
66         fs = driver.find_elements_by_xpath('//span[@class="nui-btn-text"]/parent::div[contains(@class,"nui-btn-hasIcon nui-mainBtn-hasIcon")]')
67         print('fs len is ',len(fs))
68         fs[0].click()#发送
69         
70 
71 
72         
73             
74             
75             
76         
77         

写完了public包,定义一个Login类,再来看怎么引用

 1 from selenium import webdriver
 2 from public import Login
 3 from time import sleep
 4 
 5 #打开谷歌浏览器
 6 dr = webdriver.Chrome()
 7 
 8 #隐式等待10秒,等待页面元素加载完毕
 9 dr.implicitly_wait(10)
10 
11 #打开网页
12 url = 'http://mail.163.com'
13 dr.get(url)
14 
15 #沉睡等待一秒后定位frame
16 sleep(1)
17 dr.switch_to.frame('x-URS-iframe')
18 
19 try:
20     #调用登录模块
21     Login().user_login(dr)
22     print('登录成功')
23 except BaseException as msg:
24     print(msg)
25     dr.quit()
26 
27 
28 #返回主frame
29 dr.switch_to.default_content()
30 sleep(1)
31 
32 try:
33     #退出
34     Login().write(dr)
35     print('写信成功')
36 except BaseException as msg:
37     print(msg)
38     sleep(1)
39     dr.quit()
40 
41 
42 sleep(1)
43 try:
44     #退出
45     Login().user_logout(dr)
46     print('退出成功')
47 except BaseException as msg:
48     print(msg)
49     dr.quit()

 

 

 

 

posted @ 2018-03-15 23:30  姚毛毛  阅读(490)  评论(0编辑  收藏  举报