吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 439|回复: 0
收起左侧

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

[复制链接]
anjeff1225 发表于 2022-8-20 02:57
本帖最后由 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]

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止回复与主题无关非技术内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-5-24 04:59

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表