量角器click元素在页面上出现之前

时间:2018-07-19 15:33:47

标签: javascript typescript protractor e2e-testing gulp-protractor

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

我一直在尝试:

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

3 个答案:

答案 0 :(得分:2)

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

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;
      }
    }

欢呼!

答案 1 :(得分:0)

您是否试图在单击之前使浏览器进入睡眠状态?

browser.sleep(2000);

答案 2 :(得分:0)

尝试通过以下方式等待元素:

describe