当前位置: 首页 > 知识库问答 >
问题:

量角器片状

强德厚
2023-03-14

我维护了一个复杂的Angular(1.5.x)应用程序,该应用程序正在使用Protractor(2.5.x)进行E2E测试。我在使用这种方法时遇到了一个问题,主要表现在测试似乎不可靠。在一个拉请求中运行良好的测试在另一个请求中失败。这涉及简单的定位器,例如by.linkTest(…)。我调试了失败的测试,应用程序位于正确的页面上,链接存在并且可以访问。

还有人遇到过这些一致性问题吗?知道原因或解决方法吗?

共有3个答案

裴焱
2023-03-14

根据我的经验,在< code>controlFlow()队列中,有些方法(例如< code>sendKeys())并不总是在预期的时间触发,这将导致测试变得不稳定。我通过将它们添加到< code>controlFlow()中来解决这个问题。例如:

this.enterText = function(input, text) {
    return browser.controlFlow().execute(function() {
        input.sendKeys(text);
    });
};
昝成弘
2023-03-14

是的,我想我们都经历过这种不稳定的问题。

实际上,剥落是任何浏览器自动化工具的常见问题。但是,在量角器的情况下,这应该更少,因为量角器具有内置的等待考虑,只有在正确加载dom后才能执行操作。但是,在少数情况下,如果看到间歇性故障,则可能必须使用一些显式等待。

我更喜欢使用一些智能等待方法,例如:

function waitForElementToClickable(locator) {
        var domElement = element(by.css(locator)),
            isClickable = protractor.ExpectedConditions.elementToBeClickable(domElement);

        return browser.wait(isClickable, 2000)
            .then(function () {
                return domElement;
            });
    }

如果使用2000毫秒作为超时,您可以使用variable.Sometimes当我的智能等待不起作用时,我也使用browser.sleep()进行配置。

都沈浪
2023-03-14

对更多端到端测试说不!

也就是说,您可以采取以下几件事来应对我们共同无情的“蛆皮”敌人:

>

  • 更新到最新的量角器(目前为4.0.0),它还带来了最新的seleniumchromedrive
  • 关闭Angular动画
  • 使用 <罢工> 龙 使用一组内置或自定义的预期条件来browser.wait()。这可能是迄今为止解决问题的最可靠方法。不幸的是,这是用例和特定问题,您需要在有问题的地方修改实际测试。例如,如果您需要单击一个元素,请等待它是可单击的:

    var EC = protractor.ExpectedConditions;
    var elm = $("#myid");
    
    browser.wait(EC.elementToBeClickable(elm), 5000);
    elm.click();
    

    最大化浏览器窗口(避免随机元素不可见或不可点击错误)。将此放入onPrepare()

    browser.driver.manage().window().maximize();
    

    还有其他特定于问题的“技巧”,比如在输入框中缓慢打字、通过JavaScript点击等。

  •  类似资料:
    • 问题内容: 我正在使用Selenium Protractor,希望从以下列表中选择所有元素,但其中一个包含文本“ Cat”,然后对其余元素执行一些操作。 是否有cssContainingText(或其他一些选择器)提供的选择器,我可以在其中提供条件以选择除包含文本“ Cat”的元素以外的所有元素? 问题答案: 您可以使用以下定位器策略创建一个 列表, 选择除包含文本 Cat 的元素以外的所有其他元

    • 问题内容: 我试图在量角器上设置一个全局变量,以在所有描述块中使用。 但这返回了以下错误: 我也看了这个问题:量角器angularJS全局变量 所以我试图以这种方式在conf.js中设置变量glob: 仍然有相同的错误。 如何在量角器测试中正确添加全局变量? 问题答案: 可以借助属性从量角器配置文件设置全局变量: 您可以使用规范中访问它。 请参阅参考配置文件。 params对象将直接传递到Prot

    • 问题内容: 我似乎无法使Protractor意识到Angular已加载并正在运行。当Chrome打开时,我的应用程序已完全加载到浏览器中,因此我知道Angular已加载并正常运行。 配置文件: 我只有一个要运行的测试,但由于量角器找不到Angular而失败了。 考试: 这是我得到的错误: UnknownError:JavaScript错误:未定义角度(会话信息:chrome = 30.0.1599

    • 问题内容: 我的页面上有一个按钮,当用户向下滚动时该按钮可见。因此,量角器测试给我一个错误: UnknownError:未知错误:元素在点(94,188)不可单击。 我尝试使用: 当我在量角器elementexplorer.js中对其进行测试时,此方法有效,但在我的常规测试中却无能为力。还有其他办法吗? 问题答案: 您需要等待诺言得以解决。以下示例来自一个未解决的问题 更新 :这是一个古老的问题(

    • 问题内容: 在升级到Protractor 4.0.0并由于重大更改调整配置后,我们终于启动了测试。 现在的问题是,在测试运行后,它失败并显示: 如何调试此问题并了解是什么原因造成的? 试图在“疑难解答”模式下运行量角器: 但是得到了完全相同的输出,没有有关错误的详细信息。 问题答案: 目前,此问题已得到解决,应该很快就会有一个热修复。快速修补程序(在发布此修补程序之前)是更改node_module

    • 我正在尝试从命令行在windows上运行量角器 如果我直接键入命令: 它工作得很好。然而,从詹金斯内部,它一直在扔: 我的env-vars似乎还可以,因为Jenkins的java和npm工作得很好。有什么想法吗?