【问题标题】:Selenium page object model python, inherit from particular classSelenium 页面对象模型 python,继承自特定类
【发布时间】:2018-07-13 22:09:52
【问题描述】:

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

这是控制台当前正在吐出的内容:进程以退出代码 0 完成。以及 Login_test 方法上的“未解决的引用 'Login'”错误。

在登录下也有一条红线。在尝试在 test_login 方法中使用它时。

这就是我的文件的设置方式。我在不同的文件夹中有 2 个 python 文件。这两个文件夹都在一个项目文件夹中。

页面/login_page.py

测试/login_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_()

【问题讨论】:

  • 欢迎来到 Stack Overflow。如果您提出具体问题并提供更多详细信息,我们可以为您提供帮助。运行代码时会发生什么?你想让它做什么不同的事情?
  • Chrome 需要启动并填写登录表单。目前控制台正在吐出:进程以退出代码0完成。登录下还有一条红线。在 test_login 函数中使用它。
  • 将鼠标悬停在Login 上。它说什么错误?
  • 未解决的参考“登录”
  • 哪一行给出了错误?

标签: python selenium object pom.xml models


【解决方案1】:

错误是因为在您使用它的可用范围内没有定义名称Login。相反,您必须在 login() 函数中使用限定名称 login_page.Login

但是,更重要的是,您不能在类名上调用with_()login_succesfull_()。相反,您需要一个 Login 类的实例。

修复此问题需要缺少几个部分。首先,Selenium 经常在测试框架的上下文中使用。这不是严格要求的,但它是最常见的用例。 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() 中创建的page 成员变量:

def test_login(self):
    self.page.with_("username", "password")
    assert self.page.login_succesfull_()

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

【讨论】:

  • 刚刚花了一个小时阅读单元测试框架。并将您的反馈应用于我的脚本。有效 。非常感谢。
猜你喜欢
  • 2012-10-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-23
  • 2013-10-15
  • 1970-01-01
  • 2020-05-17
相关资源
最近更新 更多