Appium:任何使用元素的id来自动化应用程序的工作

时间:2013-12-26 10:41:18

标签: java android selenium-webdriver appium

我正在使用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

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

由于

6 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

Appium“id”与Android资源ID相关联,可以像这样访问:

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

我在Appium中使用ID遇到的一个问题是ListView。由于列表是在Android中“即时”创建的,因此每行实际上具有相同的Android资源ID,即使每行都填充了用户不同的内容。

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

答案 2 :(得分:0)

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

电话应该是:

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

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

通过ID查找也可以使用Appium,因为它使用支持它的Selendroid。

答案 3 :(得分:0)

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

类名称效果很好...如果页面上有多于1个...只需选择所需的索引值即可。例如: 文本框[1] .Sendkeys( “1234”)

答案 4 :(得分:0)

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

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

到目前为止,它一直很适合我。

答案 5 :(得分:0)

使用android uiautomatorviewer 获取正确的android元素ID。点击以下链接:

Can we find element by ID in appium