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()

     

  • 相关阅读:
    SpringIOC框架简单实现(注解实现)
    Spring前瞻----Java反射机制
    SpringMVC_前置知识
    SpringAOP_构造注入实现
    SpringAOP_设置注入实现
    SpringIOC-设置注入实现
    IDEA一些常用快捷键
    第一章计算机网络概述
    第二大章--数据链路层思维导图
    第一大章--1.2标准化工作
  • 原文地址:https://www.cnblogs.com/yaomaomao/p/8577183.html
Copyright © 2011-2022 走看看