让 WebdriverIO 等待特定组件重新加载

Make WebdriverIO wait for a specific component to reload

我正在使用 Spectron 测试 Electron/React 应用程序,它使用 WebdriverIO commands API。我想测试某些组件的属性,但我想确保仅在组件重新加载后才测试它们。

正常的 WebDriverIO 等待命令,如 waitForText()waitForExist(),等待一些变化,但我需要等到组件重绘发生。例如,组件在重绘之前已经存在或已经有一些文本。这意味着对文本的任何测试都将在重绘之前进行,我不会测试新文本。有等待重绘的通用方法吗?

您可以使用 the custom 'waitUntil' command 等待任何事情。您需要弄清楚您在等待什么,或者如何判断组件已重绘,但这应该是可能的。

是否有可以标记的 class 名称?

此外,'waitFor' 命令确实带有否定标志,允许您等待元素停止存在或停止包含文本。这可能会有用。

针对这个有关等待更改文本的特定问题,另一种解决方案是使用 XPath selector。 XPath 语言将 HTML 页面视为一棵树,但除其他内容外,文本也是该树中的一个单独节点。与 CSS selector 不同,您可以轻松地 select 基于其内部文本的元素。看到这个 article.

因此,如果我的 XPath select 或使用文本 'predicate',那么我可以使用来自 webdriver API.

的标准 waitForExist 命令

例如,假设我的 p 元素在重绘后应该有文本 'Burgers'。它在重绘之前确实存在,但它有一些其他文本。只有 select 它有新的下一个:

const selector = '//*p[text()="Burgers"]';
browser.waitForExist(selector);