将直接一步步写代码更改为使用unittest模式
- 继承unittest.TestCase 类
- setUp(self) -> None:前置方法
- def tearDown(self) -> None:后置方法
- 测试用例方法需要以test开头
优化元素等待时间问题
- from selenium.webdriver.support.wait import WebDriverWait
- from selenium.webdriver.support import expected_conditions as EC
- 使用WebDriverWait(self.web,10).until((EC.visibility_of_all_elements_located((By.XPATH,’//*[@id=“name”]’))))方法,使得元素加载完成后在操作
引入POM设计模式,使用单独的类来管理某个界面的元素
- 新建login_page.py
- 新建类来管理页面元素
- login_page.py内容
'''管理登录界面所有的元素'''
from selenium.webdriver.common.by import By
class LoginPage:
username_imnput = (By.XPATH,'//*[@id="name"]')
password_input = (By.XPATH,'//*[@id="password"]')
login_button = (By.XPATH, '//*[@id="submit"]')
继续优化,封装常用公共方法,如 click ,sendkeys等
- 新建common.py 文件
- 新建InitBrowser 类,封装方法
- 优化后的代码
'''封装公用的方法'''
from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
class InitBrowser():
'''浏览器的常用操作封装'''
def __init__(self):
self.web = webdriver.Chrome('./driver/chromedriver.exe')
self.web.get('https://sso.kuaidi100.com/sso/authorize.do')
def wait_element_visible(self,locate):
'''
等待元素出现
:return: 返回这个元素
'''
element = WebDriverWait(self.web, 10).until(EC.visibility_of_element_located(locate))
return element
def click(self,locate):
'''
点击之前自动调用等待方法
:return:
'''
self.wait_element_visible(locate).click()
def send_kyes(self,locate,value):
'''
输入之前,自动调用等待时间方法
:return:
'''
print(locate,value)
self.wait_element_visible(locate).send_keys(value)
让用例继承公共类,直接调用公用方法
项目结构
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/0f301aa0e6e2258157aaa29db69df1a5.png#pic_center)
'''测试用例'''
from po_test.Pages.login_page import LoginPage
from po_test.common.common import InitBrowser
import unittest
class TestCases(unittest.TestCase,InitBrowser):
def setUp(self) -> None:
'''前置操作,初始化,打开浏览器,连接数据库,初始化数据'''
InitBrowser.__init__(self)
pass
def tearDown(self) -> None:
'''后置操作,关闭浏览器 关闭数据库 清理测试数据'''
pass
def test_01(self):
'''引用POM'''
'''封装公用方法,click sendkey find_by,并继承'''
self.send_kyes(LoginPage.username_imnput,'*******')
self.send_kyes(LoginPage.password_input, '*******')
self.click(LoginPage.login_button)
if __name__ == '__main__':
unittest.main()
'''管理登录界面所有的元素'''
from selenium.webdriver.common.by import By
class LoginPage:
username_imnput = (By.XPATH,'//*[@id="name"]')
password_input = (By.XPATH,'//*[@id="password"]')
login_button = (By.XPATH, '//*[@id="submit"]')
'''封装公用的方法'''
from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
class InitBrowser():
'''浏览器的常用操作封装'''
def __init__(self):
self.web = webdriver.Chrome('./driver/chromedriver.exe')
self.web.get('https://sso.kuaidi100.com/sso/authorize.do')
def wait_element_visible(self,locate):
'''
等待元素出现
:return: 返回这个元素
'''
element = WebDriverWait(self.web, 10).until(EC.visibility_of_element_located(locate))
return element
def click(self,locate):
'''
点击之前自动调用等待方法
:return:
'''
self.wait_element_visible(locate).click()
def send_kyes(self,locate,value):
'''
输入之前,自动调用等待时间方法
:return:
'''
print(locate,value)
self.wait_element_visible(locate).send_keys(value)