在反应原生

时间:2016-08-31 10:56:12

标签: ios xcode react-native

我正在使用Xcode UI测试器测试应用程序。该应用的每个页面都有一些标题文字。当测试访问某个页面时,我想使用XCTAssertEqual测试标题文本。

页面的react-native看起来像这样

  <View style={[AppStyles.appContainer, AppStyles.container]}>
    <NavigationBar
      title={<NavbarTitle title= {this.state.title} />}
      statusBar={{style: 'light-content', hidden: false}}
      style={AppStyles.navbar}
      tintColor={AppConfig.primaryColor}
      leftButton={leftButton} />
    <route.component navigator={navigator} route={route} {...route.passProps} onNavigationStateChange={this.onNavigationStateChange}  />
  </View>

并且NavBarTitle组件的代码是

var NavbarTitle = React.createClass({
  render: function() {
    return (
      <Text style={[AppStyles.baseText, AppStyles.strong, AppStyles.navbarTitle]}>{this.props.title}</Text>
    );
  }
});

我想把断言写成像这样的东西

XCTAssertEqual(NavbarTitle.text, 'Sign In')

如何使用XCTAssertEqual找到NavbarTitle.text?

1 个答案:

答案 0 :(得分:0)

执行此操作的一种方法是仅查找标题文本,而不是标题元素。以下代码等待文本出现,然后断言它确实存在。

  let exists = NSPredicate(format: "exists == true")
  let signIn = app.staticTexts[" Sign In"]
  expectationForPredicate(exists, evaluatedWithObject: signIn, handler: nil)
  waitForExpectationsWithTimeout(15, handler: nil)
  XCTAssert(signIn.exists)

这可能会在其他正好登录的网页上产生误报。显示在页面上,因此最好识别确切的元素。