在不使用期望的情况下检查项目的存在

时间:2014-06-25 14:13:14

标签: angularjs selenium-webdriver protractor

在我的网络应用程序中,注销链接仅在用户登录后显示 - 登录页面上不存在。

在我的量角器测试中,我想确保用户已登录 - 这意味着在我的第一次测试中,我必须登录。要检查用户是否已登录或需要登录,我想要检查是否存在注销链接。

我不想使用expect执行此操作,因为页面上没有注销链接是完全可以接受的,这只是意味着我必须登录。

我正在寻找的是一种在我的测试中实现if场景的方法(在beforeEach函数中) - 伪代码:

if (!signOut.isPresent()) {
    login();
}

到目前为止,我还没有找到一种简单的方法 - 在页面的DOM中对项目的存在进行的所有检查似乎都依赖于expect,当项目不是时,它会抛出异常出现在页面上。

有一种简单的方法吗?

2 个答案:

答案 0 :(得分:1)

你可能只是抓住了例外。

或者使用findElements并检查返回的元素列表是否为空,这意味着该元素不存在。

(不确定第二个解决方案是因为我不知道Protractor,但是findElements就是你在Java中使用的那个)

答案 1 :(得分:0)

@ alb-i986的回答让我走上正轨。在查看findElement API之后,我找到了两个关于如何为此函数执行错误处理的参考:

Protractor从findElement函数返回 promise ,并且promise then函数(在解析了promise后调用)需要两次回调参数:

  • 成功解析promise时调用第一个,即在页面上找到该元素。
  • 第二个是可选的。如果未提供,则在未找到元素的情况下进行标准错误处理。这意味着抛出 No Such Element 异常。在提供回调时,您自己有责任在那里处理错误。错误对象作为该回调的参数提供。

利用第二个(可选)回调,您可以决定处理或忽略错误:

protractor.getInstance().findElement(by.css(".signout-button"))
    .then(function(element) {
        // The element was found on the page - click it.
        element.click();
    }, function(error) {
        // Sign out button is not present - handle the error or ignore it
    });