尝试使用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_()
答案 0 :(得分:0)
错误是因为在您使用它的可用范围中没有定义名称Login
。相反,您必须使用login_page.Login
功能中的限定名称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):
...
现在,在您的测试中,使用我们在page
中创建的setUp()
成员变量:
def test_login(self):
self.page.with_("username", "password")
assert self.page.login_succesfull_()
我建议您在继续使用Selenium之前阅读有关unittest
的更多信息。您还需要了解有关Python中面向对象编程的更多信息,尤其是创建和使用对象所需的语法。