如何在 Detox 中控制 React-Native webview?
How can I controle React-Native webview in Detox?
我在 https://github.com/wix/detox 找不到控制 React-Native Webview 的方法。
还有一个问题,
你知道如何在 React-Navigatoin 中按下返回按钮吗?
如果你答对了,你就是个好人。
您无法与 iOS、Android 的 detox 和平台限制交互 RN webView。
参考这些。
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()
我正在努力做一个好人
我们团队实施的一个骇人听闻的解决方案是添加一个 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>
);
}
}
然后从排毒中你可以运行任意javascript像这样:
await element(by.id('test_input')).replaceText(`
$('#input-email').val('${USERNAME}');
$('#input-password').val('${PASSWORD}');
$('#login-form').submit();
`);
我们有一个我们使用的自定义 webView,因此您的解决方案也需要在您的 WebView
上实施某种 executeJavascript
。
不是最好的解决方案,但仍然有效。
我在 https://github.com/wix/detox 找不到控制 React-Native Webview 的方法。
还有一个问题,
你知道如何在 React-Navigatoin 中按下返回按钮吗?
如果你答对了,你就是个好人。
您无法与 iOS、Android 的 detox 和平台限制交互 RN webView。 参考这些。 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()
我正在努力做一个好人
我们团队实施的一个骇人听闻的解决方案是添加一个 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>
);
}
}
然后从排毒中你可以运行任意javascript像这样:
await element(by.id('test_input')).replaceText(`
$('#input-email').val('${USERNAME}');
$('#input-password').val('${PASSWORD}');
$('#login-form').submit();
`);
我们有一个我们使用的自定义 webView,因此您的解决方案也需要在您的 WebView
上实施某种 executeJavascript
。
不是最好的解决方案,但仍然有效。