gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 04:49:55 27 4
gpt4 key购买 nike

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

这是控制台当前吐出的内容:进程已完成,退出代码为 0。Login_test 方法上出现“ Unresolved 引用‘登录’”错误。

登录下也出现红线。尝试在 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_()

最佳答案

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

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

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

import unittest.TestCase

class TestLogin(TestCase):
pass

大多数这样的类都会有一个setUp() 方法来为类中的每个测试初始化​​fixture。例如,这是您可以执行登录的地方:

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 中面向对象编程的更多信息,尤其是创建和使用对象所需的语法。

关于python - Selenium 页面对象模型 python,继承自特定类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48599095/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com