量角器不等待模态

时间:2018-07-10 20:14:44

标签: protractor bootstrap-modal wait

我有一个在量角器测试中显示的模态。当我单独运行测试用例时,它可以正常工作,但是当我将其作为较大文件的一部分(当前为10个案例,有些冗长)运行时,它会使事情变慢,因此,模式打开和关闭的速度较慢。连锁效应是,当我尝试单击页面上的按钮时,由于模式(该模式现在应该已经关闭)仍然存在并阻塞了按钮,因此它崩溃了。

如何正确检测模态何时打开/关闭,以便我可以解决此问题?

谢谢!

(也是一个AngularJS应用程序)

2 个答案:

答案 0 :(得分:1)

这些是我的手动等待助手功能:

    static async forElementAbsent(element) {
    return await new Promise<any>((resolve) => {
        browser.driver.wait(ExpectedConditions.stalenessOf(element), 10000,
            `Timed out waiting for element to be absent`).then(() => {
                resolve();
            });
    });
}

static async forElementPresent(element) {
    return await new Promise<any>((resolve) => {
        browser.driver.wait(ExpectedConditions.presenceOf(element), 10000,
            `Timed out waiting for element to be present`).then(() => {
                resolve();
            });
    });
}

答案 1 :(得分:0)

在我们的测试中,我们正在等待手动显示模态。我们有辅助功能,例如

export async function forCondition(condition: () => boolean | PromiseLike<boolean>, timeout = 20000): Promise<boolean> {
  try {
    return await browser.wait(condition, timeout);
  } catch (err) {
    return false;
  }
}

给定功能等待条件完成。因此,在您的特定情况下,您将不得不找出所显示模式的css选择器。 假设选择器为by.css('.modal.visible'),那么如果我们要等待模式显示,就必须编写如下内容:

t.it('modal should be displayed', async function() {
  // wait for modal to be displayed
  var result = await forCondition(function() { 
    return element(by.css('.modal.visible')).isDisplayed();
  });

  expect(result).toBeTruthy();
});