【发布时间】:2013-07-09 10:54:23
【问题描述】:
在测试没有凭据的网站登录时,我们会收到一条提示信息,提示应输入电子邮件和密码。当我们尝试在没有任何凭据的情况下登录时,我需要断言错误的文本是相关的。不幸的是,我不确定我该怎么做。
你看,在 LoginPage 类中有一个错误消息框变量:tool_tip = '.error-container'。在test_login_without_credentials 中,我添加了message 变量。但是错误消息框没有静态错误文本,我很难为每种情况做出正确的断言。
例如,如果您没有输入任何凭据,您会收到以下消息:
<div class="error-container">
<ul>
<li>
<b>Email</b>
: Value is required and can't be empty
</li>
<li>
<b>Password</b>
: Value is required and can't be empty
</li>
</ul>
</div>
另一个输入无效密码的例子:
<div class="error-container">
<ul>
<li>
<b>Email</b>
: '123' is no a valid email address in the basic format local-part@hostname
</li>
<li>
<b>Password</b>
: Value is required and can't be empty
</li>
</ul>
</div>
还有一个输入无效密码的例子:
<div class="error-container">
<ul>
<li>
<b>Log in</b>
: Unknown user or invalid password given
</li>
</ul>
</div>
我正在使用 PageObject 模式进行测试。这是 loginPage.py 文件的一部分,其中包含无凭据测试的描述:
class LoginPage(object):
login_page_link = 'Log in'
email_field_locator = 'email'
password_field_locator = 'password'
login_button_locator = 'submit'
tool_tip = '.error-container'
def __init__(self, driver, base_url):
self.driver = driver
self.driver.get(base_url)
def login_without_credentials(self, email = '', password = ''):
self.driver.find_element_by_link_text(self.login_page_link).click()
self.driver.find_element_by_id(self.email_field_locator).clear()
self.driver.find_element_by_id(self.email_field_locator).send_keys(email)
self.driver.find_element_by_id(self.password_field_locator).clear()
self.driver.find_element_by_id(self.password_field_locator).send_keys(password)
self.driver.find_element_by_id(self.login_button_locator).click()
tooltip_message = WebDriverWait(self.driver, 10).until(lambda s: s.find_element_by_css_selector(self.tool_tip).text)
return tooltip_message
这里是 testLogin.py 本身:
class TestLoginLogout(object):
@classmethod
def setup_class(cls):
cls.verificationErrors = []
cls.driver = selenium_driver.connect()
cls.driver.implicitly_wait(10)
cls.base_url = selenium_driver.base_url
cls.email = configs.EMAIL
cls.password = configs.PASSWORD
@classmethod
def teardown_class(cls):
cls.driver.quit()
assert cls.verificationErrors == []
def test_login_without_credentials(self):
login_page = LoginPage(self.driver, self.base_url)
message = login_page.login_without_credentials()
if __name__ == '__main__':
pytest.main([__file__, "-s"])
【问题讨论】:
-
我已经更新了问题信息。抱歉,如果不清楚。
标签: python python-2.7 selenium-webdriver pageobjects