我正在测试一个使用 Detox 呈现 Web 视图的应用程序,但它无法单击单击链接后出现的按钮。
我的流程是这样的:
单击网页视图上的链接
const myWebView = web(by.id("web-view"));
const myLink = myWebView.element(by.web.cssSelector("div a"))
await myLink.tap();
单击链接并呈现页面后,单击按钮
const myButton = myWebView.element(by.web.cssSelector("div button"))
await myButton.tap();
此时我明白了
Test Failed: Failed to evaluate JavaScript on web view: <RNCWKWebView: 0x162079200; frame = (0 0; 393 675.333); backgroundColor = UIExtendedSRGBColorSpace 1 1 1 1; layer = <CALayer: 0x6000004b7960>>. JS exception: Element not found
我希望我能够使用
waitFor
但这似乎特定于 NativeElement
类型
我也尝试过
await expect(myButton).toExist();
但是得到了
Test Failed: Failed on web expectation: TOEXIST with params on element with CSS == 'div button', web-view: <RNCWKWebView: 0x10c0ea800; frame = (0 0; 393 675.333); backgroundColor = UIExtendedSRGBColorSpace 1 1 1 1; layer = <CALayer: 0x600000842100>>. Got evaluation result: false. Element info: `<null>`
在单击按钮之前,我抛出了
console.log(await element(by.type("RCTView")).getAttributes());
,因为返回值需要几秒钟的时间,并且可以很好地单击按钮,因为那时按钮已完成渲染。我宁愿等待该元素存在或可见。
你可以用它来检查是否存在?
await waitFor(element(by.web.cssSelector("div button"))).toBeVisible().withTimeout(5000)