我正在使用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的经验,请分享您的经验。
由于
答案 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。点击以下链接: