Appium 求助:移动端自动化测试 APPIUM 测试

不贱不散 · August 28, 2019 · Last by 不贱不散 replied at August 30, 2019 · 1452 hits

使用 appium 测试 react native 应用时,遇到 ScrollView 与自定义的组件子元素不能定位元素的问题,尝试过 app-inspector 同样无法定位,安卓可以的,只是iOS定位不到,请问有什么解决办法吗

1.运行环境

  • appium 桌面版 1.12.1
  • node 12.1.0
  • Carthage
  • AppleID
  • cnmp
  • Homebrew
  • Xcode 10.2.1

2.截图:

组件内子元素无法选择,无法定位。

最佳回复
不贱不散 回复

ScrollView 标签设置 accessible={false} 属性看看

共收到 11 条回复 时间 点赞

https://github.com/facebook/react-native/pull/24113/files 这是RN RCTView框架自身的问题,已经有人提了PR,可以跟RD配合试试

@ltyd5788 谢谢,不知道提出的PR有没有采纳,采纳的话是在新版本0.60+完善这个问题,目前还是本地修改测试下;还有RD是什么😢

不贱不散 回复

可以跟你们开发商量下Fork RN工程,把上面的PR代码合进去,App在开个新的分支引入Fork RN的版本打个包试试看。总之你跟开发聊下前因后果,官方有人提了PR解决了这个问题,让他们想办法打个包给你试试看

ltyd5788 回复

按照PR中的方案修改以后重新打包并没有解决我的问题,PR的中方案确实有一些改变,单个元素的可访问标签不会连接在一起了,但元素依然不能访问。
定位到view元素其子元素还是不能定位,该节点下的元素看不到无法访问

不贱不散 回复

子元素的控件类型也可以详细说下,来一张截图会更好,我记得有些元素是需要手动添加属性打开的

组件类型是常用的一些组件 输入框、按钮等如下,这些组件放在<ScrollView ></ScrollView >标签内就定位不到了


<div style="display:flex;flex-direction:row;height:44px;">
<div style="justify-content:center;align-items:center;height:44px;">
</div>
<div style="flex:1;">
<div style="display:flex;flex:1;height:44px;justify-content:center;">
<div type="InputItem" textMarginLeft="0" type="text" fontSize="17px" placeholder="请输入您的账号" maxLength="6" placeholderTextColor="#fff" labelNumber="2" fontColor="#fff" id="account_" value='' containerStyle="height:44px;background-color: rgba(0, 0, 0);font-size:17px;padding-left:14px;" > </div>
</div>
</div>
</div>

ltyd5788 回复

试过删除这种标签,里面的元素又可以访问定位了

不贱不散 回复

ScrollView 标签设置 accessible={false} 属性看看

ltyd5788 回复

accessible={false} 有用的,自定义view组件设置这个属性可以查看定位元素节点,这种解决的;ScrollView 依然不行,是不是设置的位置不对呢

<ScrollView
ref={this.id}
scrollEventThrottle={0}
accessible={false} //设置属性测试
//keyboardShouldPersistTaps={'always'}
horizontal={boolSwitch(this.props.horizontal)}
// refreshControl={this._refreshControlComponent}
refreshControl={
boolSwitch(this.props.down) ?
<RefreshControl
refreshing={this.state.isRefreshing}
onRefresh={this._onRefresh}
tintColor={this.props.themeStyle.listView_loading}
title={'正在刷新...'}
titleColor={this.props.themeStyle.listView_loadingText}
/> :
null
}
onScroll={event => this.props.onScroll ? this.props.onScroll({ nativeEvent: event.nativeEvent, showFooter: this._onScroll(event) }) : !this.state.showFooter && this._onScroll(event)}
>
<TouchableOpacity
style={{ flex: 1 }}
activeOpacity={1}
>
{this.props.children}
</TouchableOpacity>
</ScrollView>
不贱不散 回复

可以在iOS 工程中 UIScrollView或UIView类 Hook addSubView方法,返回(BOOL)isAccessibilityElement 成false,看看效果

非常感谢,问题解决了,我关帖了😄

不贱不散 关闭了讨论 30 Aug 13:55
不贱不散 关闭了讨论 30 Aug 13:55
不贱不散 关闭了讨论 30 Aug 13:55
需要 Sign In 后方可回复, 如果你还没有账号请点击这里 Sign Up