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)
原文地址:https://www.cnblogs.com/wangxuetest/p/13257782.html