如何在 Detox 中控制 React-Native webview?

Posted

技术标签:

【中文标题】如何在 Detox 中控制 React-Native webview?【英文标题】:How can I controle React-Native webview in Detox? 【发布时间】:2019-01-17 16:26:38 【问题描述】:

我在https://github.com/wix/detox 找不到控制 React-Native Webview 的方法。

还有一个问题, 你知道如何在 React-Navigatoin 中按下返回按钮吗?

如果你给出正确的答案,你就是一个好人。

【问题讨论】:

【参考方案1】:

您无法将 RN webView 与 detox、iosandroid 的平台限制进行交互。 参考这些。 https://github.com/wix/detox/issues/136#issuecomment-306591554 https://github.com/wix/detox/issues/334#issuecomment-335802212

在 iOS 中按下返回按钮:

element(by.type('_UINavigationBarBackIndicatorView')).tap();

在 Android 中按返回按钮:

device.pressBack()

我正在努力成为一个好人?

【讨论】:

我们在 Detox 18.7.0 中添加了对 Android 网页视图的支持。对 iOS 的支持在我们的路线图中。【参考方案2】:

我们团队实施的一个骇人听闻的解决方案是添加一个Test 组件以及我们的WebView

import React,  Component  from 'react'
import  View, TouchableOpacity, TextInput, Alert  from 'react-native';


export default class Test extends Component 
  constructor(props) 
    super(props);
    this.state = 
      val:"",
    ;
  
  onPress() 
    const  webView  = this.props;
    if (webView && webView.executejavascript) 
      webView.executeJavascript(this.state.val);
    
  
  render() 
    return (
      <View style=flex:0.1, flexDirection:'row'>
        <TextInput
          testID="test_input"
          onChangeText=val => this.setState( val )
          style=flex:1,color:'white',backgroundColor:'#720000'
         />
         <TouchableOpacity
          testID="submit_test_input"
          onPress=this.onPress.bind(this)
          style=flex:0.1,backgroundColor:'red'
          />
      </View>
    );
  

然后从 detox 你可以像这样运行任意 javascript:

await element(by.id('test_input')).replaceText(`
  $('#input-email').val('$USERNAME');
  $('#input-password').val('$PASSWORD');
  $('#login-form').submit();
`);

我们有一个我们使用的自定义 webView,因此您的解决方案还需要在您的 WebView 上实现某种 executeJavascript

不是最好的解决方案,但仍然有效。

【讨论】:

嘿,我正在尝试实现类似的目标...您能提供更多详细信息吗?你在哪里使用了这个测试组件?谢谢 @ddacrs 已经有一段时间没有看到这个了,但是在测试期间测试组件将与 webview 一起呈现,它所做的只是添加一个注入 JS(在本例中为 JQuery)的地方网络视图。

以上是关于如何在 Detox 中控制 React-Native webview?的主要内容,如果未能解决你的问题,请参考以下文章

如何在最新版本中配置 Detox 生命周期挂钩?

如何使用 Detox 在 React Native 中检查是不是选择或禁用了特定元素?

如何在 Detox 中启用 `debug` 运行 RN 测试?

Detox:如何使用 detox 在通知中心点击 iOS 推送通知

如何使用 Detox 在 Android 上的操作栏中点击三点菜单(更多选项)?

如何在 Detox 中添加诸如 not.toHaveText 之类的否定断言?