我是appium的新手。
我正在通过购物应用(Flipkart)的自动化来学习appium。
我正在尝试从&#34;推荐的折扣<&#34; 列表中选择元素第5个元素。
为了做到这一点,我必须进行水平滚动以触及该元素。但我遇到问题是获取容器元素,其中&#34;推荐折扣为你&#34; 的元素存在,所以我可以获取5th element
。
我猜问题是 flipkart的UI 总是会发生变化。
driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
Thread.sleep(3000);
driver.scrollToExact("Recommended Offers for You");
Thread.sleep(10000);
// Getting error on below line
AndroidElement ele = (AndroidElement) driver.findElement(By.xpath("//android.support.v7.widget.RecyclerView[@index='1']"));
for(int i=0;i<4;i++)
{
Thread.sleep(2000);
if (ele.findElement(By.xpath("android.widget.RelativeLayout[@index='2']")).isDisplayed())
{
ele.findElement(By.xpath("android.widget.RelativeLayout[@index='2']")).click();
break;
}
else
{
horizontalScroll(ele);
}
}
public void horizontalScroll(AndroidElement ele)
{
Dimension size=driver.manage().window().getSize();
int x_start=(int)(size.width*0.60);
int x_end=(int)(size.width*0.30);
int y=130;
ele.swipe(SwipeElementDirection.RIGHT,x_end,y,4000);
}
我正在使用uiautomator
到find elements
。以下是UI的屏幕截图。
我有以下问题:
请帮忙!提前致谢。
答案 0 :(得分:2)
在应用中找到元素的最佳(或者说最快)方法是使用 resource-id 。如果 resource-id 不可用/相同,则必须使用 xpath
如果你想学习 Appium ,你可以从 Mukesh Otwani 开始学习这些教程,这里是link
如果用户界面不断更新解决方法,请继续使用更改来更新脚本。
希望它有所帮助!
答案 1 :(得分:1)
在这里,我看到元素有一个资源ID。为什么不使用它?
如果显示应用的用户界面,找到元素的最佳方法是什么。 总是,按资源ID查找元素是首选方法。因为,它发现元素比xpath更快。此外,如果中间添加了元素,则xpath会发生变化,因为层次结构中的元素会发生变化。
我应该自动化哪个应用才能学习appium。 任何原生应用程序,首先使用appium为iOS提供UICatalog,为Android提供playstore应用程序。
如果应用程序的UI始终发生变化,如何自动化应用程序 用于自动化UI应用程序的可扩展解决方案涉及创建页面对象,在一个位置维护定位器而不是在测试用例中展开等等。它取决于更改的大小,是导航已更改,元素层次结构已更改等基于资源ID的选择始终是首选,如果应用程序中存在布局更改,则会减少自动化脚本的更改。但我担心没有一种方法可以解决这个问题。
答案 2 :(得分:1)
如果您有多个具有相同资源ID的UI元素,则可以使用索引和resource-id。
WebElement element=driver.findElements(By.id("your_id")).get(1);
答案 3 :(得分:0)
在android中如果视图是任何类型的列表视图,则所有元素都将具有相同的id,因此在这种情况下,您可以使用该名称来点击它,或者您可以创建xpath并使用它来执行您的操作