如何通过资源ID获取元素?

How to get element by resource id?

我花了几个小时尝试使用 appium javascript 客户端通过 id 搜索元素,但没有成功。在 stack overflow 中发现了其他一些帖子,说明它有效,但对我不起作用。看来我可以使用类似的东西:

var buttonEl = await driver.findElement(By.id("resourceid"));

但我总是收到一条错误消息:

InvalidSelectorError: Locator Strategy 'css selector' is not supported for this session

这里是源代码:

"use strict";
 
var wd = require("selenium-webdriver"),
    By = wd.By,
    until = wd.until;

// Setting Desired Capabilities.
var desiredCaps = {
    platformName: "Android",
    deviceName: "a3ae1c63",
    appPackage: "com.mypackage",
    appActivity: ".Main",
    browserName: '',
    noReset: true,
    newCommandTimeout: 1000000

};

async function test() {
        //Initiating the Driver
        let driver = await new wd.Builder().usingServer("http://localhost:4723/wd/hub").withCapabilities(desiredCaps).build();
         
        var buttonEl = await driver.findElement(By.id("id/contact_selector"));
            buttonEl.click();

        }

test();

我现在很困惑。我知道我似乎无法在 android 会话中使用通过 id 查找元素,但另一方面我已经读到有人成功使用它。

如有任何帮助,我们将不胜感激。

我认为您正在为定位器策略使用 selenium 参数。请在此处阅读 appium 选择器的文档 http://appium.io/docs/en/commands/element/find-elements/index.html#selector-strategies

试试这个

var buttonEl = await driver.element("id", "resource-id");

我终于解决了我的问题。主要问题是我没有使用所需的网络 driver。我切换到 webdriverio,现在一切正常。

更好的起点是查看 appium github 中的示例。他们每个 driver 都有一些例子。不过代码有点过时了。