Selenium页面对象模型python,从特定类继承

Selenium页面对象模型python,从特定类继承,python,selenium,object,pom.xml,models,Python,Selenium,Object,Pom.xml,Models,尝试使用selenium和python实现页面对象模型,但没有启动chrome实例。谁能给我指出正确的方向吗?我期待Chrome启动并填写登录表单 这就是控制台当前正在吐出的内容:进程已完成,退出代码为0。以及登录测试方法上的“未解析引用'Login'”错误 登录时也会出现一条红线。尝试在test_登录方法中使用它时 这就是我的文件的设置方式。我在单独的文件夹中有2个python文件。这两个文件夹都位于项目文件夹中 Pages/login_page.py 测试/登录\u test.py #log

尝试使用selenium和python实现页面对象模型,但没有启动chrome实例。谁能给我指出正确的方向吗?我期待Chrome启动并填写登录表单


这就是控制台当前正在吐出的内容:进程已完成,退出代码为0。以及登录测试方法上的“未解析引用'Login'”错误

登录时也会出现一条红线。尝试在test_登录方法中使用它时

这就是我的文件的设置方式。我在单独的文件夹中有2个python文件。这两个文件夹都位于项目文件夹中

Pages/login_page.py

测试/登录\u test.py

#login_page.py file
> from selenium.webdriver.common.by import By

class Login:
    _username_input = {"by": By.NAME, "value": "username"}
    _password_input = {"by": By.NAME, "value": "password"}
    _submit_button = {"by": By.ID, "value": "btn-inloggen"}
    _success_message = {"by": By.CSS_SELECTOR, "value": ".#header > div.right > a:nth-child(4)"}

    def __init__(self, driver):
        self.driver = driver
        self.driver.get("website")

    def with_(self, username, password):
        self.driver.find_element(self._username_input["by"],
                                 self._username_input["value"]).send_keys(username)
        self.driver.find_element(self._password_input["by"],
                                 self._password_input["value"]).send_keys(password)
        self.driver.find_element(self._submit_button["by"],
                                 self._submit_button["value"]).click()

    def login_succesfull_(self):
        return self.driver.find_element(self._success_message["by"],
                                        self._success_message["value"]).is_displayed()<

#test_login.py file
from selenium import webdriver
from Pages import login_page

class TestLogin:

    def login(self, request):
        driver = webdriver.Chrome()

        def quit():
            driver.quit()
        request.addfinalizer(quit)
        return login_page.Login(driver)

    def test_login(self):
        Login.with_("username", "password")
        assert Login.login_succesfull_()
#login_page.py文件
>从selenium.webdriver.common.by导入
类登录:
_username_input={“by”:by.NAME,“value”:“username”}
_密码输入={“by”:by.NAME,“value”:“password”}
_submit_button={“by”:by.ID,“value”:“btn inloggen”}
_success_message={“by”:by.CSS_选择器,“value”:“#header>div.right>a:n子级(4)”
定义初始化(自身,驱动程序):
self.driver=driver
self.driver.get(“网站”)
def带_u2;(self、用户名、密码):
self.driver.find_元素(self._用户名_输入[“按”],
self.\u用户名\u输入[“值”])。发送密钥(用户名)
self.driver.find_元素(self._密码_输入[“按”],
self.\u密码\u输入[“值”])。发送密钥(密码)
self.driver.find_元素(self._submit_按钮[“by”],
self._submit_按钮[“值”])。单击()
def登录成功(自我):
返回self.driver.find_元素(self._success_消息[“by”],
self._success_message[“value”])。是否显示()<
#test_login.py文件
从selenium导入webdriver
从页面导入登录页面
类TestLogin:
def登录(自我,请求):
driver=webdriver.Chrome()
def quit():
driver.quit()
request.addfinalizer(退出)
返回登录页面。登录(驱动程序)
def测试_登录(自我):
使用“(“用户名”、“密码”)登录
断言登录。登录成功

错误是因为在您使用它的可用范围中没有定义名称
Login
。相反,您必须使用限定名称
login\u页面。登录
与您的
login()
函数一样

但是,更重要的是,您不能使用类名称调用
,或
登录成功。相反,您需要一个
Login
类的实例

修复此问题需要几个部件。首先,硒通常在测试框架的上下文中使用。这不是严格要求的,但却是最常见的用例。PyCharm默认使用unittest运行测试。要使用unittest,必须创建一个继承自
TestCase
类的类:

import unittest.TestCase

class TestLogin(TestCase):
    pass
大多数这样的类都有一个
setUp()
方法,用于初始化类中每个测试的夹具。例如,您可以在此处执行登录:

import unittest.TestCase

class TestLogin(TestCase):
    def setUp(self):
        self.page = self.login()
接下来,您的
login()
函数接受一个它从未使用过的
request
参数。您只需删除它:

def login(self):
    ...
现在在测试中,使用我们在
setUp()
中创建的
页面
成员变量:


在继续使用Selenium之前,我建议您阅读更多关于
unittest
。您还需要进一步了解Python中的面向对象编程,特别是创建和使用对象所需的语法。

欢迎使用堆栈溢出。如果您提出具体问题并提供更多细节,我们可以为您提供帮助。运行代码时会发生什么?你希望它有什么不同?Chrome需要启动并填写登录表单。当前控制台正在弹出:进程已完成,退出代码为0。登录下还有一条红线。在测试登录函数中使用时初始化。将鼠标悬停在登录上。它说的是什么错误?未解析的引用“Login”哪一行给出了错误?只花了一个小时阅读unittest框架。并将您的反馈应用到我的脚本中。成功了。非常感谢。
def test_login(self):
    self.page.with_("username", "password")
    assert self.page.login_succesfull_()