6

所以例如我有:

wd.findElement.By(name("searchBttn"));

ui xml 屏幕截图中的资源 ID 是 com.aut.android:id/searchBttn

并且 Appium 找不到该项目。我尝试过使用 ID 和名称。这里还有什么我可以尝试的吗?我缺少的地方是否有直线相关列表的直线?

4

4 回答 4

7

您可以通过 Resource ID 在 Appium 中找到 Android 项目,但您必须指定整个包名称以及资源 ID:

wd.findElement.By(id("com.aut.android:id/searchBttn"));
于 2014-02-10T22:58:50.947 回答
2

除了 name 或 id 不可用之外,您可以通过其他几种方式获取元素

可以使用 resource-id 查找元素,如下例所示:

driver.findElement(By.xpath("//*[@resource-id='login']")).click();

driver.findElement(By.xpath("//*[@id='cash']")).click();

这里:com.android.calculator2:id/digit5是完整的资源ID,可以这样使用:

driver.findElement(By.id("com.android.calculator2:id/digit5")).click();

可以通过类名找到:

driver.findElement(By.className("android.widget.Button")).click();
于 2018-02-16T07:24:10.167 回答
1

At least name works for me. I'm trying to find out how it works for ID, but you can look at the following.

Example: If the button text is set to "testbtn", then you can access it from Appium with the following command:

driver.findElement(By.name("testbtn")).click();

This works for me, try it.

EDIT: As one of the Appium devs stated here, it currently seems to be not possible to access elements by ID on Android.

EDIT2: This feature is now implemented! As I found out, you can now access elements from Android by ID using selendroid (it seems to be a sub part of Appium).

In your test class you need to specify capabilities.setCapability("device", "selendroid"); when setting up instead of capabilities.setCapability(CapabilityType.BROWSER_NAME, "Android");

Now you can just access a button with

driver.findElement(By.id("testbtn")).click();

You can find the official documentation from Selendroid here

于 2013-10-16T12:17:32.993 回答
0

我在 python 中遇到了同样的问题,即使我可以在 appium 检查器中看到它们,我也找不到具有 id 属性的元素。一些应用程序具有驱动程序可以处理的多个上下文,例如 NATIVE_APP 和 WEB_VIEW,因此我必须将驱动程序的上下文切换到 WEB_VIEW,以便它可以使用 driver.find_elements_by_id("")( python 语法)找到元素

有关如何使用代码示例切换上下文的文档 - http://appium.io/docs/en/writing-running-appium/web/hybrid/index.html

于 2019-10-20T18:17:33.327 回答