Jquery 在角度e2e测试中对输入字段强制“模糊”

Jquery 在角度e2e测试中对输入字段强制“模糊”,jquery,angularjs,blur,end-to-end,Jquery,Angularjs,Blur,End To End,我在angularjs e2e测试中尝试测试ng模糊功能。基本上,当一个字段模糊时,另一个字段中的数据也会随环境而变化 下面是我的e2e测试[selector]和[selector2]是用于可读性的JQuery选择器。“我的代码”中的实际选择器工作正常;我知道这一点,因为他们通过了其他e2e测试: it("updates sister fields", function () { //try to cause a blur using an angular scenario thing

我在angularjs e2e测试中尝试测试ng模糊功能。基本上,当一个字段模糊时,另一个字段中的数据也会随环境而变化

下面是我的e2e测试[selector]和[selector2]是用于可读性的JQuery选择器。“我的代码”中的实际选择器工作正常;我知道这一点,因为他们通过了其他e2e测试:

it("updates sister fields", function () {
    //try to cause a blur using an angular scenario thing
    element(<selector>).val("Tommy");
    applyFunction(<selector>, function(element) {
        element.trigger("blur");
    });

    //try again to cause a blur with query()
    element(<selector>).query(function(element, done) {
        element.blur();
        done();
    });

    //try a third time to blur
    element(<selector>).query(function(element, done) {
        var event = new CustomEven('blur');
        $element.dispatchEven(event);
        done();
    });

    //if the blur has triggered this other element should have expected text
    expect(element(<selector2>).val()).toEqual("expected text");
});
这三个想法是从中发现的,但都没有奏效。前两个字段中没有抛出错误,但expect失败,因为字段中的数据从未更改为预期文本。所以我很确定,这个领域永远不会被模糊。我已经反复验证了应用程序中的功能。它可以工作,我只是无法在e2e测试中触发模糊。 第三个失败,因为它找不到“CustomEvent”

在使用这两个选项之前,我也尝试过这些,但它们都抛出了未定义的错误,这就是我开始搜索的时候

element(<selector>).trigger("blur");
element(<selector>).triggerHandler("blur");
element(<selector>).blur();
不可用,因为它将选择具有ng模型的所有字段并更新其字段。相反,我用

element().val()
element().val()
语法。在我使用的场景运行程序中,旧版本没有导致ng模型更新。因此,如果需要访问ng repeat中的单个字段,请使用“using”调用。乙二醇

using('.example-parent-class').input('ng-model').enter('text').
using('.example-parent-class').input('ng-model').enter('text').

感谢大雄让我知道如何恰当地结束一个问题。 大部分内容都是在我第一次编辑问题时重复的

经过多次调试,我发现上面的方法3正确地触发了模糊,这导致了错误,从未起作用,但其他两种方法似乎都很好。事实上,我的ng模型实际上没有被正确更新,因此我的ng blur中的函数没有以更新任何其他字段的方式启动

我遇到的问题是因为我正在访问ng repeat中的多个表单字段。这一重复导致ng模型在类似领域被命名为相同的,因此采用标准e2e测试

input([ng-model]).enter([val])
不可用,因为它将选择具有ng模型的所有字段并更新其字段。相反,我用

语法。在我使用的场景运行程序中,旧版本没有导致ng模型更新。因此,如果需要访问ng repeat中的单个字段,请使用“using”调用。乙二醇

using('.example-parent-class').input('ng-model').enter('text').
using('.example-parent-class').input('ng-model').enter('text').

所以,在我的编辑中,我没有详细说明“使用”的内容,所以我将在这里阐述我的新理解。using调用只返回以下选择的较小范围。在我的例子中,我需要将作用域限制在ng repeat中的某个div,以便通过其ng模型访问正确的输入。

如果表单中有更多输入,可以单击其中一个。因此,模糊效果将会出现。

Hi@lalibelamon很高兴看到您找到了解决方案并发布了结果。不要将问题重命名为“已解决”,您需要在下面回答您自己的问题,然后接受您的答案,以便在S.O.干杯上正确标记为已回答!多谢大雄。行。