4

我正在使用 Appium 测试移动应用程序。当我使用 xpath 时,它工作正常,但我无法处理该应用程序的 ID。

//This is working fine

remoteDriver.findElementByXPath("/linear[1]/window[2]/linear[1]/linear[1]/linear[2]/linear[1]/text[2]").click(); // Click on signIn button 

// This doesn't recognize the element

remoteDriver.findElementById("ButtonSignIn").click(); // Click on signIn button

如果有人对使用 id 的 appium 有经验,请分享您的经验。

谢谢

4

6 回答 6

3

仅 android API 级别 18 或以上(果冻豆)才可以使用 Id。如果您使用 uiautomatorviewer ,那么在节点详细信息中您将看到“resource-id”,它可以轻松用于自动化应用程序,但相同的 id 不适用于 android API 级别 < 18。解决方法是使用其他元素属性例如 - xpath、tagName、className 等。有关更多详细信息,请使用链接 - https://github.com/appium/appium/blob/master/docs/finding-elements.md

于 2014-02-06T07:21:16.177 回答
1

Appium "id" 与 Android Resource Id 相关,可以像这样访问:

remoteDriver.findElementById("com.exampleCompany.appName:id/ButtonSignIn").click();

我在 Appium 中使用 ID 时遇到的一个问题是 ListView。因为列表是在 Android 中“动态”创建的,所以每一行实际上都有相同的 Android 资源 ID,即使从用户的角度来看,每一行都填充了不同的内容。

如果您发现您的按钮是 ListView 的一部分,这就是它们无法访问的原因,您可以通过在每行创建时动态设置内容描述符来解决此问题,然后通过 Appium 使用“find element by姓名。”

于 2014-02-18T17:25:30.087 回答
0

我一直在使用 findElement(By.id("")) 。例如:

remoteDriver.findElement(By.id("ButtonSignIn")).click();

到目前为止,它对我来说一直很好。

于 2014-12-12T02:11:16.453 回答
0

我使用 FindElementsByClassName("abc.widget.EditText") (例如)或 FindElement(By.Name("Continue") 而不是 id

类名很好用...如果页面上超过 1 个...只需选择您需要的那个的索引值。例如:textfields[1].Sendkeys("1234")

于 2014-02-10T08:25:13.113 回答
0

仔细检查正在使用的 ID。ID 不应该是“ButtonSignIn”,而是“com.company.app:id/ButtonSignIn”。

调用应该是:

remoteDriver.findElementById("com.company.app:id/ButtonSignIn").click();

基本上,如果 layout.xml 文件使用 android:id="@+id/ButtonSignIn" 指定按钮的 ID(并且您的应用程序是 com.company.app),那么在您的测试中您应该使用“com.company.app :id/ButtonSignIn" 而不是 "ButtonSignIn"。

还通过 ID 查找应该适用于 Appium,因为它使用支持它的 Selendroid。

于 2014-01-18T16:45:42.427 回答
0

使用 android uiautomatorviewer获取正确的 android element id。点击下面的链接:

我们可以在appium中通过ID找到元素吗

于 2015-01-06T11:12:10.903 回答