【问题标题】:jasmine + protractor byID failing茉莉花 + 量角器 byID 失败
【发布时间】:2015-07-22 08:17:54
【问题描述】:

这是我的 HTML,它存在且有效。当我使用 WebStorm 打破测试用例时,我可以检查页面并看到这个元素很好......

<a id="privacyPolicy1234" on-tap="goPrivacyPolicy()" class="disable-user-behavior">Privacy Policy</a>

这是我的 Jasmine 测试,它找不到元素。

it("should list a privacyPolicy ", function() {

    privacyPolicyElement = element(by.id('privacyPolicy1234'));
    expect(privacyPolicyElement.getText()).toContain("Privacy Policy");

错误又回来了

 Message:
    NoSuchElementError: No element found using locator: By.id("privacyPolicy1234")

编辑:

还尝试将其放在一行中,并在我期望 true 的地方得到 false

expect(element(by.id('privacyPolicy1234')).isPresent()).toBe(true);

【问题讨论】:

    标签: javascript selenium selenium-webdriver jasmine protractor


    【解决方案1】:

    使用显式等待,而不是使测试不可靠且速度较慢的browser.sleep()。例如,您可以等待“隐私政策”元素出现:

    var EC = protractor.ExpectedConditions,
        privacyPolicyElement = element(by.id('privacyPolicy1234'));
    
    browser.wait(EC.presenceOf(privacyPolicyElement), 5000);
    
    expect(privacyPolicyElement.getText()).toContain("Privacy Policy");
    

    请务必注意,在这种情况下,量角器会等待最多 5 秒,每 500 毫秒检查一次元素是否存在(默认情况下)。一旦满足条件,它就会停止等待。如果 5 秒后,该元素仍然不存在 - 您将收到超时异常。

    【讨论】:

    • 谢谢!一般来说,如果元素永远不会出现,并且我得到超时异常,测试是否失败?
    • @Erik 是的,它会因超时异常而失败。您还可以提供自定义错误消息作为第三个参数(在超时值之后,在上面的示例中为 5000)。
    • @Erik 我对此表示怀疑。您能否添加有关doesn't seem to properly wait 的更多详细信息?谢谢!
    • alexce,我删除了我的问题。结果当我以不同的分辨率呈现页面时,css元素不存在。这是页面中的错误,而不是测试。再次感谢您。
    【解决方案2】:

    事实证明,我正在加载页面之前对其进行测试..

    作为一种解决方法,我添加了

    it("should list a privacyPolicy ", function() {
        browser.sleep(2000);
        privacyPolicyElement = element(by.id('privacyPolicy1234'));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-01
      • 2018-12-06
      • 2016-09-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多