Protractor 量角器不等待模态

Protractor 量角器不等待模态,protractor,bootstrap-modal,wait,Protractor,Bootstrap Modal,Wait,我有一个模态,它出现在量角器测试中。当我单独运行测试用例时,它工作得很好,但是当我将它作为更大文件的一部分运行时(目前为10个用例,有些冗长),它会减慢速度,因此,模式的打开和关闭速度会变慢。链式效应是,当我试图点击页面上的按钮时,它崩溃了,因为模态(现在应该是关闭的)仍然存在并阻止了按钮 我怎样才能正确地感知模态何时打开/关闭,以便能够解决这个问题 谢谢 (另外,这是一个AngularJS应用程序)在我们的测试中,我们正在等待手动显示模态。我们有助手函数,例如 export async fun

我有一个模态,它出现在量角器测试中。当我单独运行测试用例时,它工作得很好,但是当我将它作为更大文件的一部分运行时(目前为10个用例,有些冗长),它会减慢速度,因此,模式的打开和关闭速度会变慢。链式效应是,当我试图点击页面上的按钮时,它崩溃了,因为模态(现在应该是关闭的)仍然存在并阻止了按钮

我怎样才能正确地感知模态何时打开/关闭,以便能够解决这个问题

谢谢


(另外,这是一个AngularJS应用程序)

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

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

以下是手动等待的“我的助手”功能:

    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();
            });
    });
}
静态异步forElementAbsent(元素){
返回等待新承诺((解决)=>{
browser.driver.wait(ExpectedConditions.stalenessOf(元素),10000,
`等待元素不存在“”时超时。然后(()=>{
解决();
});
});
}
静态异步forElementPresent(元素){
返回等待新承诺((解决)=>{
browser.driver.wait(ExpectedConditions.presenceOf(element),10000,
`等待元素出现“”时超时。然后(()=>{
解决();
});
});
}

因此,如果此模式是一个窗口(不确定),您可以调整上周的功能,等待窗口数量(至少)比窗口打开时少一个。如果模式是一个警报,那么您需要等待EC.not(EC.alertIsPresent))。我不认为这是一个窗口,我不确定如何实现预期条件(我还是一个比较新的量角器新手),我将此作为一个注释而不是答案,因为它不是真正的答案。我回避了这个问题,将有问题的用例放在文件的更高位置。通过这种方式,脚本在到达那里时不会自动备份。这不是一个真正的解决办法。更像是黑客。
    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();
            });
    });
}