zoukankan      html  css  js  c++  java
  • UI自动化selenium unittest单元测试框架-基本用法

    import unittest
    import time
    from selenium import webdriver
    
    
    class MailLogin(unittest.TestCase):
        def setUp(self):
            url = 'https://mail.yeah.net/'
            self.browser = webdriver.Chrome()
            self.browser.get(url)
            self.browser.implicitly_wait(3)
    
        # 用户名,密码为空
        def test_login_01(self):
            # 我在正常用id定位按钮click事件不起作用,那么考虑是因为浏览器可能已经解析了网页的源码和webdriver源码执行不一致
            # 可以用driver.page_source查看webdriver执行源码
            # *代表所有的  '//*[@id="loginDiv"]'的意思就是查询id是loginDiv标签的第一个iframe标签
            # //div[@id='login']/a   这个是div中id=login的标签下的a标签
            # form下的id=login的input标签  //form[@id='login']/input
            # form下的id=login的input标签,多个form属性id=login  //form[@id='login'][0]/input
            # table name='data' td class='row1' tr td class='row1' tr a 找a标签 //table[@name='data']/td[@class='row1'][1]/a
            elem = self.browser.find_element_by_xpath('//*[@id="loginDiv"]/iframe')
            self.browser.switch_to.frame(elem)  # 这个标签里面要么是id,要么是name,要么是通过xpath找到控件实例
            self.browser.find_element_by_name('email').send_keys('')
            self.browser.implicitly_wait(3)  # 隐式等待 当控件预加载时,不超过3s就继续等待直到加载完成,如果超过3s,报错
            self.browser.find_element_by_name('password').send_keys('')
            self.browser.implicitly_wait(3)
            self.browser.find_element_by_id('dologin').click()
            self.browser.implicitly_wait(3)
    
        def tearDown(self):
            print('teardown')
    
    
    if __name__ == '__main__':
        unittest.main()

     下面我们对代码进行验证页面封装,这样的好处是只需要操作页面就可以,方便后续如果页面有变动,不会太影响代码的变动

    import unittest
    import time
    from selenium import webdriver
    from elements.login import Login
    
    #邮箱自动化登录页面
    class MailLogin(unittest.TestCase):
        def setUp(self):
            url = 'https://mail.yeah.net/'
            self.browser = webdriver.Chrome()
            self.browser.get(url)
            self.browser.implicitly_wait(3)
            self.login_page = Login(self.browser)
    
        def test_login_01(self):
            self.login_01('wangxue', '123', '帐号或密码错误')
    
        # 用户名,密码为空
        def login_01(self, username, password, error_message):
            # 我在正常用id定位按钮click事件不起作用,那么考虑是因为浏览器可能已经解析了网页的源码和webdriver源码执行不一致
            # 可以用driver.page_source查看webdriver执行源码
            # *代表所有的  '//*[@id="loginDiv"]'的意思就是查询id是loginDiv标签的第一个iframe标签
            # //div[@id='login']/a   这个是div中id=login的标签下的a标签
            # form下的id=login的input标签  //form[@id='login']/input
            # form下的id=login的input标签,多个form属性id=login  //form[@id='login'][0]/input
            # table name='data' td class='row1' tr td class='row1' tr a 找a标签 //table[@name='data']/td[@class='row1'][1]/a
            elem = self.browser.find_element_by_xpath('//*[@id="loginDiv"]/iframe')
            self.browser.switch_to.frame(elem)  # 这个标签里面要么是id,要么是name,要么是通过xpath找到控件实例
            self.login_page.name.send_keys(username)
            self.browser.implicitly_wait(3)  # 隐式等待 当控件预加载时,不超过3s就继续等待直到加载完成,如果超过3s,报错
            self.login_page.passwd.send_keys(password)
            self.browser.implicitly_wait(3)
            self.browser.find_element_by_id('dologin').click()
            self.browser.implicitly_wait(3)
            result = self.browser.find_element_by_xpath('//div[@id="nerror"]/div[2]').text
            self.assertEqual(result, error_message)
        def tearDown(self):
            print('teardown')
    
    
    if __name__ == '__main__':
        unittest.main()
    #这个是封装配置控件页面
    class Login():
        by_name = 'email'
        by_id = 'password'
        driver = None
    
        def __init__(self, driver):
            self.driver = driver
    
        @property
        def name(self):
            return self.driver.find_element_by_name(self.by_name)
    
        @property
        def passwd(self):
            return self.driver.find_element_by_name(self.by_id)
  • 相关阅读:
    JavaScript入门知识点整理
    正则表达式
    bootstrap css编码规范
    JavaScript高级编程(学习笔记)
    【 D3.js 选择集与数据详解 — 2 】 使用data()绑定数据
    bootstrap table:JQuery中each方法绑定blur事件监听input输入是否合法,进入死循环
    bootstrap-table中导出excel插件bootstrap-table-export使用
    托业考后感
    《Pride and Prejudice》英文版读后记忆
    迷茫的当下,我在做什么
  • 原文地址:https://www.cnblogs.com/wangxuetest/p/13257782.html
Copyright © 2011-2022 走看看