我开始用Appium测试我的React Native应用程序。我有一个简单的登录场景,在输入和提交一些用户名和密码后,我希望应用程序的status
为'Logged in'
。我在iPhone X 12.2模拟器上运行测试。
但是,测试失败,并显示以下错误:
Expected: "Logged in"
Received: "status"
不知何故,文本值没有被正确接收。那么,如何获取元素的内部文本呢?
App.js:
<Text accessibilityLabel="status">{this.state.status}</Text>
appium.test.js:
test('Login success', async() => {
expect(await driver.hasElementByAccessibilityId('username input')).toBe(true)
expect(await driver.hasElementByAccessibilityId('password input')).toBe(true)
expect(await driver.hasElementByAccessibilityId('submit button')).toBe(true)
expect(await driver.hasElementByAccessibilityId('status')).toBe(true)
await driver.elementByAccessibilityId('username input').sendKeys('some_username')
await driver.elementByAccessibilityId('password input').sendKeys('some_password')
await driver.elementByAccessibilityId('submit button').click()
const result = await driver.elementByAccessibilityId('status').text()
console.log(result) // 'status' WHY???
// the test runs fine until here:
expect(result).toBe('Logged in')
})
我所能想到的是,text()
不是获取元素内部文本的正确函数,但这就是我在文档或教程中看到的所有内容……
发布于 2019-04-15 17:48:14
我也遇到了同样的问题。似乎RN0.50引入了这个问题。
这不是Appium上的bug,而是WDA实现以及它如何返回文本值的问题。https://github.com/appium/appium/issues/10349有一个关于这个问题的讨论。
你可以在IOS上使用testID
而不是accessibilityLabel
来解决。
let textProps={}
if(Platform.OS==='android')
textProps.accessibilityLabel = "welcomeLabel"
...
...
...
<Text
style={styles.welcome}
{...textProps}
testID="welcomeLabel">
...
...
您仍然可以使用elementByAccessibilityId
函数。
https://stackoverflow.com/questions/55676899
复制相似问题