自动化测试脚本-帐号注册到激活

     

在https://www.oschina.net/(开源中国)网站使用邮箱注册,登录QQ邮箱激活注册帐号:

 

#coding=utf-8
from selenium import webdriver

#用谷歌浏览打开https://www.oschina.net/
drvier=webdriver.Chrome()
drvier.get('https://www.oschina.net/')

#浏览器在全屏幕模式下执行2
drvier.maximize_window()

#点击注册
drvier.find_element_by_xpath('/html/body/header/div/div[2]/div/a[2]').click()
#使用邮箱注册
drvier.find_element_by_xpath('/html/body/section/div/div/div[1]/nav/span[2]/span').click()
#输入邮箱
drvier.find_element_by_xpath('//*[@id="userMail"]').send_keys('******')
#输入昵称
drvier.find_element_by_xpath('//*[@id="mail_logon"]/div/div[2]/div[1]/input').send_keys('******')
#输入密码
drvier.find_element_by_xpath('//*[@id="mail_logon"]/div/div[3]/div[1]/input').send_keys('******')
#再次输入密码
drvier.find_element_by_xpath('//*[@id="mail_logon"]/div/div[4]/div[1]/input').send_keys('******')

#手动输入验证码
number=input('请输入验证码:')
drvier.find_element_by_xpath('//*[@id="mail_logon"]/div/div[5]/div[1]/input').send_keys(number)
#选择性别
drvier.find_element_by_xpath('//*[@id="mail_logon"]/div/div[6]/div/div[2]/label').click()
#同意协议
drvier.find_element_by_xpath('//*[@id="mail_logon"]/div/div[7]/div[1]/input').click()
#点击注册
drvier.find_element_by_xpath('//*[@id="mail_logon"]/div/div[8]/button').click()
#访问QQ邮箱 drvier.get(
'https://mail.qq.com/') #切换到iframe(id='login_frame') drvier.switch_to.frame('login_frame')
#登录QQ邮箱激活开源中国社区 drvier.find_element_by_xpath('//*[@id="u"]').send_keys('******') drvier.find_element_by_xpath('//*[@id="p"]').send_keys('******') drvier.find_element_by_xpath('//*[@id="login_button"]').click() #切换到iframe(id='mainFrame') drvier.implicitly_wait(3) drvier.switch_to.frame(drvier.find_element_by_xpath('//*[@id="mainFrame"]')) #点击收件箱 drvier.find_element_by_xpath('//*[@id="folder_1"]').click() #点击激活邮件 drvier.find_element_by_xpath('//*[@id="div_showtoday"]/table/tbody/tr/td[3]/table/tbody/tr/td[3]/div[1]/u').click() #获得激活链接窗口句柄 jh_windows=drvier.current_window_handle #点击激活链接 drvier.find_element_by_xpath('//*[@id="mailContentContainer"]/table/tbody/tr[3]/td/p[2]/a').click() #获得当前所有打开的窗口的句柄 all_handles = drvier.window_handles #获得继续访问窗口句柄 for handle in all_handles: if handle != jh_windows: drvier.switch_to.window(handle) #点击继续访问 drvier.find_element_by_xpath('/html/body/div/div[2]/div[2]/a[1]').click()

 问题一:刚开始在定位昵称、密码、验证码、性别、协议、注册元素时,提示:element not visible ,原因是由于页面上有两个结构类似的元素(用手机注册也有这些元素),因为这个定义对“手机注册”元素也同样适用,而且“手机注册”元素的位置在前面,所以就会出现element not visible。

解决方法:使用全路径的xpath(或者是往前定位,直到能区分出元素1和元素2)。 

问题二:在登录页面定位用户名和密码时,提示:NoSuchElementException: Message: Unable to locate element,原因是由于嵌套了iframe框架WebDriver 每次只能在一个页面上识别元素,对于iframe 嵌套内的页面上的元素,直接定位是定位是定位不到的。

解决方法:selenium提供了switch_to.frame()方法来切换frame,括号里的内容可以传入id、name、index以及selenium的WebElement对象。

通常采用id和name就能够解决绝大多数问题。但有时候frame并无这两项属性,则可以用index和WebElement来定位:

  • index从0开始,传入整型参数即判定为用index定位,传入str参数则判定为用id/name定位;
  • WebElement对象,即用find_element系列方法所取得的对象,我们可以用tag_name、xpath等来定位frame对象。

问题三:在用“find_element_by_class_name()”方法定位元素属性class="c-footer-a1 btn_blue"时,提示:invalid selector: Compound class names not permitted,原因是由于class属性存在空格,

解决方法:换成CSS 定位或者其他方式定位。

 问题四:在最后点击继续访问按钮时,提示:NoSuchElementException: Message: Unable to locate element,原因是由于没有定位到当前窗口。

解决方法:

  • current_window_handle  获得当前窗口句柄
  • window_handles   返回的所有窗口的句柄到当前会话
  • switch_to_window()   用于切换到相应的窗口,与上一节的switch_to_frame() 是类似,前者用于不同窗口的切换,后者用于不同表单之间的切换。

 

posted @ 2017-12-31 17:51  lengjf  阅读(...)  评论(... 编辑 收藏