zoukankan      html  css  js  c++  java
  • 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()

     

  • 相关阅读:
    免费的视频、音频转文本
    Errors are values
    Codebase Refactoring (with help from Go)
    Golang中的坑二
    Cleaner, more elegant, and wrong(msdn blog)
    Cleaner, more elegant, and wrong(翻译)
    Cleaner, more elegant, and harder to recognize(翻译)
    vue控制父子组件渲染顺序
    computed 和 watch 组合使用,监听数据全局数据状态
    webstorm破解方法
  • 原文地址:https://www.cnblogs.com/yaomaomao/p/8577183.html
Copyright © 2011-2022 走看看