anjeff1225 发表于 2022-8-20 02:57

python 如何从一个PO的class/fucntion传到另个一个文件的class/function里面

本帖最后由 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',
    'passwordInputField': 'input',
    'login_button': 'input',
    '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
from utlis import DriverUtil

elementsMap = {
    'usernameInputField': 'input',
    'passwordInputField': 'input',
    'login_button': 'input',
    '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
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传又打开了好多网页。求大佬们帮帮忙。要怎样才能实现我的想法呢。
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'])

页: [1]
查看完整版本: python 如何从一个PO的class/fucntion传到另个一个文件的class/function里面