【问题标题】:Make an assertion that error text is correct断言错误文本是正确的
【发布时间】: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


【解决方案1】:

我猜是最简单的方法:

## in your LoginPage class
error_msg = {'no credentials': text1, 'wrong password': text2} ## and so on.
def assert_login_error_msg(message, error_type):
    assert message == self.error_msg[error_type], 'Wrong error message text for %s' % error_type

那么,在你拨打message = login_page.login_without_credentials()之后:

login_page.assert_login_error_msg(message, 'no credentials')

UPD:您说过要做出正确的断言对您来说并不容易。我认为您必须知道要输入的值是否有效,因此选择正确的错误消息文本应该是个问题。

UPD2:顺便说一句,我建议您使用(login, password, valid=True) args 创建一个登录方法,对于这种情况,请在末尾添加 if else 部分:

if not valid:
    tooltip_message = WebDriverWait(self.driver, 10).until(lambda s: s.find_element_by_css_selector(self.tool_tip).text)
    return tooltip_message
else:
    return ## Or return some page class, where you should get after login

【讨论】:

  • 太好了,非常感谢您的所有建议!这真的很有帮助。关于“UPD”:不幸的是,我不是自动化 QA,也没有技术背景,所以有时即使是简单的事情对我来说也变得非常困难。
猜你喜欢
  • 2018-09-18
  • 1970-01-01
  • 1970-01-01
  • 2014-04-07
  • 2021-01-14
  • 2019-04-19
  • 2022-01-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多