无法使用 Appium、Javascript 和 webdriverio 为元素调用 setValue

Cannot call setValue for element using Appium, Javascript and webdriverio

我正在使用 Appium、UIAutomator2、webdriverio 和 JavaScript 来测试虚拟设备上 运行 的应用程序。

我搜索一个元素并设置(或在本例中为清除)它的值。

使用 class 选择器效果很好。

const codeField = await driver.$("android.widget.EditText");
await codeField.clearValue();

但我想通过 id 查找元素,所以我有这个:

const codeField = await driver.findElement("id", "de.abcdef.ghijkl:id/activation_code_input");
await codeField.clearValue();

结果是:

webdriver: COMMAND findElement("id", "de.abcdef.ghijkl:id/activation_code_input")

webdriver: [POST] http://127.0.0.1:4723/wd/hub/session/f0a6844b-55e0-468d-b165-14cb219e55f7/element

webdriver: DATA {using: 'id', value: 'de.abcdef.ghijkl:id/activation_code_input'}

webdriver: RESULT {element-6066-11e4-a52e-4f735466cecf: '5d56ef1d-0036-4ecf-8b26-f060e290510b', ELEMENT: '5d56ef1d-0036-4ecf-8b26-f060e290510b'}

最后,什么时候应该设置字段的值

TypeError: codeField.clearValue is not a function

我错过了什么吗?

出于某种原因,当我使用 findElement("id", ...) 或 findElement("xpath", ...) 时,webdriverio 无法正确解析检索到的元素。因为我想通过 id resp 来处理元素。 resource-id 而不是 class,我可以通过使用 xpath 语法

传递 resource-id 来解决它
const codeField = await driver.$('//*[@resource-id="de.abcdef.ghijkl:id/activation_code_input"]');