Angularjs 量角器e2e测试从实用步骤返回承诺

Angularjs 量角器e2e测试从实用步骤返回承诺,angularjs,promise,protractor,e2e-testing,Angularjs,Promise,Protractor,E2e Testing,我对量角器和一般的承诺是相当陌生的。我环顾了一下四周,虽然有很多关于回复承诺的帖子,或者排队操作的结果,但没有一个对我有多大意义,所以我想要的是一个相当简单的答案,我希望这是一个简单的问题 我正在为我的angularjs网站写一些量角器测试 我主要使用bootstrap和angular,没有其他第三方库,除了偶尔使用的angular插件,如toaster和bootstrap modal 在进入测试的断言部分之前,我有几个“安排步骤”。比如说: a) 用户登录 b) 人员访问选项表单(可能或可能

我对量角器和一般的承诺是相当陌生的。我环顾了一下四周,虽然有很多关于回复承诺的帖子,或者排队操作的结果,但没有一个对我有多大意义,所以我想要的是一个相当简单的答案,我希望这是一个简单的问题

我正在为我的angularjs网站写一些量角器测试

我主要使用bootstrap和angular,没有其他第三方库,除了偶尔使用的angular插件,如toaster和bootstrap modal

在进入测试的断言部分之前,我有几个“安排步骤”。比如说:

  • a) 用户登录
  • b) 人员访问选项表单(可能或可能 根据某些外部条件,屏幕上不会显示 因素,但如果它不存在,他们可以按一下按钮打开它 )
  • c) 人员在选项窗体上执行操作
  • d) 断言表单上的文本框现在包含正确的值
当表单已经出现在屏幕上时,我可以很容易地通过测试,但让我陷入困境的是步骤b),在步骤b)中,我需要首先检查表单是否处于活动状态,如果表单未处于活动状态,请单击一个按钮,然后再进入步骤c

我试着回报我的承诺,就像这样:

//
// Is the user settings form active at the mo?
//
function _isUserSettingsFormActive()
{
    var result = element(by.id(logoutFormID)).isDisplayed;
    return result;
}
但是如果我调用。那么在_isUserSettingsFormActive()上,我会得到以下错误:

[31mTypeError: undefined is not a function[0m
但是,如果我输出_isUserSettinsFormActive()的结果,我会看到以下内容,因此我知道它返回了一些东西:

function () {
return self.elementArrayFinder_[fnName].
apply(self.elementArrayFinder_, arguments).toElementFinder_();
}
我所要做的就是检查一个项目是否存在,并在执行断言之前对其进行操作

它需要在一个函数中,因为这段代码将在我整个测试套件的许多地方使用。这不是“expect”本身,更像是一个步骤,可能需要也可能不需要一个操作来设置浏览器以使我的测试通过。

是一个函数,因此应该这样调用它:

function _isUserSettingsFormActive()
{
    var result = element(by.id(logoutFormID)).isDisplayed();
    return result;
}

量角器不像Selenium的Java或C#绑定那样工作(它更有趣,但需要更多的工作来实现Java或C#中的简单操作)。如果options表单也不在DOM中,但是如果它在DOM中并且只是隐藏,那么返回计数承诺会更安全,您可以使用isDisplayed()。我在下面为这两种情况编写了两个示例,包括根据条件单击按钮

选项1(在DOM中不存在且不显示):


谢谢你。我想我找错人了。不过我有点困惑,因为isDisplayed的docs声明它返回一个承诺,该承诺将通过该元素当前是否在页面上可见来解决。这就是为什么我要得到工作/回报的承诺。如果只是一个函数,你能澄清一下这些文档对我意味着什么吗?只是为了让我明白我将来要读什么!:)是的,这有点让人困惑,但主要是因为缺乏示例
isDisplayed
是一个返回承诺的函数,因此您可以执行以下操作:
元素(by.id(logoutFormID)).isDisplayed().then(函数(可见){console.log(可见);})
function _isUserSettingsFormActive() {
    //$$('#logoutFormId') is the equivalent of element.all(by.id('logoutFormId'))
    $$('#logoutFormId').count().then(function(num){
         if(num < 1) {
            element(by.id('openLogoutButton').click();
         }
    });
};
function _isUserSettingsFormActive() {
    //$('#logoutFormId') is the equivalent of element(by.id('logoutFormId'))
    $('#logoutFormId').isDisplayed().then(function(visible){
         if(!visible) {
                element(by.id('openLogoutButton').click();
         }
    });
};