我正在使用 Spectron 测试一个 Electron/React 应用程序,它使用WebdriverIO commands API。我想测试某些组件的属性,但我想确保仅在组件重新加载后才测试它们。
正常的 WebDriverIO 等待命令,例如waitForText()
or waitForExist()
,等待一些更改,但我需要等到组件重绘发生。例如,组件在重绘之前已经存在或已经有一些文本。这意味着对文本的任何测试都将在重绘之前进行,并且我不会测试新文本。有没有等待重绘的一般方法?
我正在使用 Spectron 测试一个 Electron/React 应用程序,它使用WebdriverIO commands API。我想测试某些组件的属性,但我想确保仅在组件重新加载后才测试它们。
正常的 WebDriverIO 等待命令,例如waitForText()
or waitForExist()
,等待一些更改,但我需要等到组件重绘发生。例如,组件在重绘之前已经存在或已经有一些文本。这意味着对文本的任何测试都将在重绘之前进行,并且我不会测试新文本。有没有等待重绘的一般方法?
您可以使用自定义的“waitUntil”命令来等待任何事情。您需要弄清楚您在等待什么,或者如何判断组件已被重绘,但这应该是可能的。
有没有可以标记的类名?
此外,“waitFor”命令确实带有否定标志,允许您等待元素停止存在或停止包含文本。那可能有用。
对于等待更改文本的特定问题,另一种解决方案是使用 XPath 选择器。XPath 语言将 HTML 页面视为一棵树,但除其他外,文本也是该树中的一个单独节点。与 CSS 选择器不同,您可以根据其内部文本轻松选择元素。见这篇文章。
因此,如果我的 XPath 选择器使用文本“谓词”,那么我可以使用waitForExist
来自 webdriver API 的标准命令。
例如,假设我的p
元素在重绘之后应该有文本“汉堡”。它在重绘之前确实存在,但它有一些其他文本。仅在具有新的下一个时才选择它:
const selector = '//*p[text()="Burgers"]';
browser.waitForExist(selector);