Detox iOS - 如何等待 Web 视图元素存在或可见?

问题描述 投票:0回答:1

我正在测试一个使用 Detox 呈现 Web 视图的应用程序,但它无法单击单击链接后出现的按钮。

我的流程是这样的:

  1. 单击网页视图上的链接

    const myWebView = web(by.id("web-view"));
    const myLink = myWebView.element(by.web.cssSelector("div a"))
    await myLink.tap();
    
  2. 单击链接并呈现页面后,单击按钮

    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());
,因为返回值需要几秒钟的时间,并且可以很好地单击按钮,因为那时按钮已完成渲染。我宁愿等待该元素存在或可见。

ios react-native webview detox
1个回答
0
投票

你可以用它来检查是否存在?

await waitFor(element(by.web.cssSelector("div button"))).toBeVisible().withTimeout(5000)
© www.soinside.com 2019 - 2024. All rights reserved.