【问题标题】:Protractor: How to properly wait after a click?量角器:点击后如何正确等待?
【发布时间】:2020-05-06 17:16:32
【问题描述】:

我正在使用 Protractor 进行 e2e 测试。测试应该首先输入太短的用户名和密码,并且由于 Angular 验证器在单击提交按钮(已禁用)时被拒绝并保持原状(这可行!),然后它应该输入正确长度的用户名和密码长度正确,点击提交按钮,不要被重定向,因为这是一个错误的登录。这失败了......最后一个测试需要输入正确的登录详细信息并单击提交,并且应该被重定向到仪表板。 根据这个答案https://stackoverflow.com/a/21785088/12360035 是解决我似乎抛出的问题所需要的全部

- Failed: script timeout
    (Session info: chrome=79.0.3945.130)
    (Driver info: chromedriver=79.0.3945.16 (93fcc21110c10dbbd49bbff8f472335360e31d05-refs/branch-heads/3945@{#262}),platform=Windows NT 10.0.18362 x86_64)```

我的两个测试都出错了。 我该如何解决? 我的测试是这样写的:

it('should enter too short username and password and NOT get redirected => stay put', () => {
   element(by.css('#inputUser')).sendKeys('bah');
   element(by.css('#inputPassword')).sendKeys('bah');
   const btn = element(by.css('#loginSubmit'));
   btn.click();
   const curUrl = browser.getCurrentUrl();
   expect(curUrl).toBe('http://localhost:4200/avior/login');
 });

  it('should enter incorrect username and password and NOT get redirected => stay put', () => {
    const ele1 = element(by.css('#inputUser'));
    const ele2 = element(by.css('#inputPassword'));
    const btn = element(by.css('#loginSubmit'));
    ele1.clear();
    ele2.clear();
    ele1.sendKeys('bah');
    ele2.sendKeys('bahbahbah');
    btn.click();
    browser.waitForAngular();
    const curUrl = browser.getCurrentUrl();
    expect(curUrl).toBe('http://localhost:4200/avior/login');
  });

  it('should enter correct username and password and get redirected to /avior/dashboard', () => {
    const ele1 = element(by.css('#inputUser'));
    const ele2 = element(by.css('#inputPassword'));
    const btn = element(by.css('#loginSubmit'));
    ele1.clear();
    ele2.clear();
    ele1.sendKeys('Chad');
    ele2.sendKeys('chadchad');
    btn.click();
    browser.waitForAngular();
    const curUrl = browser.getCurrentUrl();
    expect(curUrl).toBe('http://localhost:4200/avior/dashboard');
  });

更新 jwt 令牌作为 cookie 作为响应发送,这可能是问题的一部分。我似乎无法在网上找到有关如何使用 Protractor 处理 cookie 的信息..

【问题讨论】:

  • 您是否在任何阶段使用browser.waitForAngularEnabled(false)browser.ignoreSynchronization 禁用了角度等待?
  • @DublinDev 刚刚搜索了我的整个代码库,不,我没有用其中任何一个禁用它
  • 是清除字段还是输入第二个测试用例的值?
  • @DublinDev 清除字段以便输入新的输入。
  • 这些字段的清除操作和新文本条目是否在第二个测试用例中成功运行?

标签: selenium protractor selenium-chromedriver e2e-testing


【解决方案1】:

在量角器中等待

等待元素呈现

this.waitForElementPresent = function (element) {
    return browser.wait(() => (element.isPresent()), 30000);
}

等待元素显示

 this.waitForElementDisplayed = function (element) {
    return browser.wait(() => (element.isDisplayed()), 30000);
}

睡眠状况

this.sleep = function (sec) {
    browser.sleep(sec * 1000);
}

预期条件

this.waitForElementVisibility = function () {
    let EC = ExpectedConditions;
    return browser.wait(EC.visibilityOf(), 30000);
}

【讨论】:

  • 感谢您的回答。我应该在我的代码中使用哪一个?
  • 睡眠条件不起作用。也许我的代码还有其他问题,只有等待部分?请问可以看一下吗?
  • 简单,写“browser.sleep(5000);”。它将等待 5 秒钟。放在点击按钮之后。
  • 它不起作用:/抛出相同的- Failed: script timeout
  • @Debasish 以这种方式在帖子中包含您的电话号码是个坏主意。您应该删除它并请求 OP 以另一种方式包含屏幕截图。
【解决方案2】:

根据这个问题Failed: script timeout: result was not received in 11 seconds From: Task: Protractor.waitForAngular() - Locator: By(css selector, #my-btn)在按钮点击之前添加browser.waitForAngularEnabled(false);似乎已经解决了错误..

【讨论】:

    猜你喜欢
    • 2014-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-29
    • 2020-06-04
    • 1970-01-01
    • 2015-03-17
    • 2017-05-18
    相关资源
    最近更新 更多