本帖最后由 anjeff1225 于 2022-8-20 11:03 编辑
刚开始学习pytest + selenium写自动化UI测试。希望大佬们指点一下
我写了一个pytest。一共有3个文件
utlis.py (所有关于网页的基本封装文件)
[] 纯文本查看 复制代码 class DriverUtil:
"""Common utils for browser"""
def __init__(self, browser_type=0):
if browser_type == 0:
self.driver = webdriver.Chrome()
elif browser_type == 1:
self.driver = webdriver.Firefox()
else:
raise NameError('Invalid browser!')
def openurl(self, url):
self.driver.get(url)
def find_element(self, value):
return self.driver.find_element(By.CSS_SELECTOR, value)
def get_text(self, value):
return self.find_element(value).text
def input_text(self, value, txt):
self.find_element(value).send_keys(txt)
def click_element(self, value):
self.find_element(value).click()
def quit_driver(self):
self.driver.quit()
login_page_po.py (关于login页面的封装)
[] 纯文本查看 复制代码 elementsMap = {
'usernameInputField': 'input[name="username"]',
'passwordInputField': 'input[name="password"]',
'login_button': 'input[value="login"]',
'error_message': 'div >p'
}
test_login.py (pytest测试的文件)
[] 纯文本查看 复制代码 from utlis import DriverUtil
from login_page_po import elementsMap
class TestLogin:
def setup_class(self):
self.driver = DriverUtil()
self.driver.openurl('https://www.stealmylogin.com/demo.html')
def teardown_class(self):
self.driver.quit_driver()
def setup(self):
self.driver.openurl('https://www.stealmylogin.com/demo.html')
def test_wrong_username(self):
self.driver.input_text(elementsMap['usernameInputField'], 'wrongadmin')
self.driver.input_text(elementsMap['passwordInputField'], 'admin')
self.driver.click_element(elementsMap['login_button'])
def test_wrong_password(self):
self.driver.input_text(elementsMap['usernameInputField'], 'admin')
self.driver.input_text(elementsMap['passwordInputField'], 'wrongpassword')
self.driver.click_element(elementsMap['login_button'])
我这样写了之后,跑了一遍测试,没有问题。打开了一个网页。两个测试也都过了。但是我的test_login.py下面有重复代码。我想把他封装到login_page_po.py里面。然后我就改动了两个文件变成以下的样子。
login_page_po.py
[Python] 纯文本查看 复制代码 from utlis import DriverUtil
elementsMap = {
'usernameInputField': 'input[name="username"]',
'passwordInputField': 'input[name="password"]',
'login_button': 'input[value="login"]',
'error_message': 'div >p'
}
class Login:
def __init__(self):
self.driver = DriverUtil()
self.driver.openurl('https://www.stealmylogin.com/demo.html')
def login_method(self, username, password):
self.driver.input_text(elementsMap['usernameInputField'], username)
self.driver.input_text(elementsMap['passwordInputField'], password)
self.driver.click_element(elementsMap['login_button'])
test_login.py
[Python] 纯文本查看 复制代码 from utlis import DriverUtil
from login_page_po import Login
class TestLogin:
def setup_class(self):
self.driver = DriverUtil()
self.driver.openurl('https://www.stealmylogin.com/demo.html')
self.login = Login()
def teardown_class(self):
self.driver.quit_driver()
def setup(self):
self.driver.openurl('https://www.stealmylogin.com/demo.html')
def test_wrong_username(self):
self.login.login_method('wrongadmin', 'admin')
def test_wrong_password(self):
self.login.login_method('admin', 'wrongpassword')
这样之后我的测试就过不了了。我能看到跑第一个测试的时候打开了2个网页。然后测试跑在了第二个网页上。然后就把第一网页关了。 其实我就是想把下面的代码封装了放在login_page_po.py里面。但是我如果只是用function,当我传到test_login.py的时候说参数不对。然后当成一个class传又打开了好多网页。求大佬们帮帮忙。要怎样才能实现我的想法呢。
[Python] 纯文本查看 复制代码 def login_method(self, username, password):
self.driver.input_text(elementsMap['usernameInputField'], username)
self.driver.input_text(elementsMap['passwordInputField'], password)
self.driver.click_element(elementsMap['login_button']) [/mw_shl_code]
|