Selenium 页面对象模型 python,继承自特定 class
Selenium page object model python, inherit from particular class
尝试使用 selenium 和 python 实现页面对象模型实践,但 chrome 的实例未启动。谁能指出我正确的方向?我期待 Chrome 启动并填写登录表单。
这是控制台当前吐出的内容:进程已完成,退出代码为 0。Login_test 方法出现“未解析的引用 'Login'”错误。
登录下也出现一条红线。在 test_login 方法中尝试使用它时。
我的文件是这样设置的。我在不同的文件夹中有 2 python 个文件。这两个文件夹都在项目文件夹中。
Pages/login_page.py
Tests/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
。
然而,更重要的是,您不能在 class 名称上调用 with_()
或 login_succesfull_()
。相反,您需要 Login
class.
的实例
缺少几个部分需要修复此问题。首先,Selenium 通常在测试框架的上下文中使用。这不是严格要求的,但却是最常见的用例。 PyCharm 默认使用 unittest 进行 运行 测试。要使用 unittest,您必须创建一个 class 继承自 TestCase
class:
import unittest.TestCase
class TestLogin(TestCase):
pass
大多数这样的 classes 将有一个 setUp()
方法来为 class 中的每个测试初始化夹具。例如,您可以在此处执行登录:
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 中了解有关面向对象编程的更多信息,尤其是创建和使用对象所需的语法。
尝试使用 selenium 和 python 实现页面对象模型实践,但 chrome 的实例未启动。谁能指出我正确的方向?我期待 Chrome 启动并填写登录表单。
这是控制台当前吐出的内容:进程已完成,退出代码为 0。Login_test 方法出现“未解析的引用 'Login'”错误。
登录下也出现一条红线。在 test_login 方法中尝试使用它时。
我的文件是这样设置的。我在不同的文件夹中有 2 python 个文件。这两个文件夹都在项目文件夹中。
Pages/login_page.py
Tests/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
。
然而,更重要的是,您不能在 class 名称上调用 with_()
或 login_succesfull_()
。相反,您需要 Login
class.
缺少几个部分需要修复此问题。首先,Selenium 通常在测试框架的上下文中使用。这不是严格要求的,但却是最常见的用例。 PyCharm 默认使用 unittest 进行 运行 测试。要使用 unittest,您必须创建一个 class 继承自 TestCase
class:
import unittest.TestCase
class TestLogin(TestCase):
pass
大多数这样的 classes 将有一个 setUp()
方法来为 class 中的每个测试初始化夹具。例如,您可以在此处执行登录:
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 中了解有关面向对象编程的更多信息,尤其是创建和使用对象所需的语法。