selenium - Protractor 片状

标签 selenium automation jasmine protractor jasmine2.0

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

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

最佳答案

Just Say No to More End-to-End Tests!

也就是说,您可以采取以下几项措施来解决我们共同的无情“脆弱”敌人:

  • 更新到 latest Protractor(当前为 4.0.0),它还带来了最新的 seleniumchromedriver
  • turn off Angular animations
  • 将龙 browser.wait() 与一组 built-in or custom Expected Conditions 一起使用。这可能是迄今为止最可靠的解决问题的方法。不幸的是,这是特定于用例和问题的,您需要在有问题的地方修改您的实际测试。例如,如果您需要单击一个元素,请等待它可单击:
    var EC = protractor.ExpectedConditions;
    var elm = $("#myid");
    
    browser.wait(EC.elementToBeClickable(elm), 5000);
    elm.click();
    
  • 最大化浏览器窗口(以避免随机元素不可见或不可点击错误)。将其放入 onPrepare() :
    browser.driver.manage().window().maximize();
    
  • 增加 Protractor and Jasmine timeouts
  • slow Protractor down 通过调整 Control Flow(不确定它是否适用于 4.0.0,请测试)
  • 在有问题的地方手动调用 browser.waitForAngular();。我不确定为什么这会有所帮助,但我看过报告,其中肯定有助于修复不稳定的测试。
  • 在您的规范中使用 jasmine done() callback。例如,这可能有助于在 it()
  • 中调用 done 之前不启动 beforeEach()
  • return a promise from the onPrepare() function 。这通常有助于确保为测试运行做好准备
  • 使用 protractor-flake package 会自动重新运行失败的测试。更像是问题的快速解决方法

  • 还有其他特定于问题的“技巧”,例如 slow typing into the text box 、单击 via JavaScript 等。

    关于selenium - Protractor 片状,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38586581/

    相关文章:

    ruby - 如何使用 Ruby 自动化 Windows Run 应用程序

    python - 如何使用 AntiCaptcha 解决 FunCaptcha/RotateCaptcha?

    selenium - 使用 XSLT 模板创建的元素对 Selenium 不可见

    python - 如何在每次不重新启动浏览器的情况下测试 Selenium 自动化?

    java - Java中的 Selenium : Not able to locate element on Amazon

    java - 放心 - 如何放心地解析数组元素

    javascript - 如何使用 jasmine-ajax 来验证发送方法是否被调用?

    javascript - 如何在不启动任何 Jasmine 测试的情况下运行 Karma 服务器

    angularjs - 模拟服务以测试 Controller

    python - 如何在 Selenium for Python 中切换到新窗口?