0

我在量角器中等待时遇到了一些问题。例如,我正在加载的页面之间导航,然后我需要单击一个按钮。但是,有时,按钮会在加载消失之前出现。所以量角器点击这个按钮,在加载的后面,按钮没有任何动作,因为加载是在屏幕上。那么,我该如何使用等待这种情况呢?

我一直在尝试:

EC.invisibilityOf(loading)
    .then(() => {
        EC.elementToBeClickable(button)
            .then(() => {
                browser.actions().mouseMove(button).click().perform();
            });
    });
});
4

3 回答 3

4

您应该为一般等待创建一些辅助方法。假设您将具有以下等待功能:

async waitForDisplayed(element: ElementFinder, timeout = 20000): Promise<boolean> {
  try {
     return await browser.wait(element.isDisplayed());
  } catch (error) {
    return false;
  }
}

假设您具有上述功能,则可以等待显示元素。结合检查页面是否仍在加载的功能,这非常有用。

要创建一个确定页面是否仍在加载的函数,您必须搜索页面加载时显示的某个元素或显示为最新元素之一的元素。在我们的测试套件中,我们一直在等待微调器消失。

等待页面加载示例:

async function waitForTestability(timeout = 20000): Promise<boolean> {
  let spinner = element(by.css('.spinner'));
  try {
    await browser.wait(async function () { return !await spinner.isDisplayed(); });
    return true;
  } catch (error) {
    return false;
  }
}

然后您可以waitForDisplayed()使用该功能修改您的功能,waitForTestability()因此无论何时使用waitForDisplayed(),首先测试页面是否仍在加载:

async waitForDisplayed(element: ElementFinder, timeout = 20000): Promise<boolean> {
      try {
         await waitForTestability();
         await browser.wait(element.isDisplayed());
         return true
      } catch (error) {
        return false;
      }
    }

干杯!

于 2018-07-20T07:56:08.743 回答
0

尝试等待元素:

static forElementVisible(element) {
    return new Promise<any>(async (resolve) => {
        await browser.driver.wait(ExpectedConditions.visibilityOf(element), 10000,
            `Timed out waiting for element to become visible`).then(() => {
                resolve();
            });
    });
}
于 2018-07-25T12:18:09.830 回答
0

您是否尝试在单击之前让浏览器休眠一点?

browser.sleep(2000);

于 2018-07-19T15:40:33.813 回答