如何在appium中找到元素

时间:2016-06-15 12:51:24

标签: java selenium automation appium

我是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);
}

我正在使用uiautomatorfind elements。以下是UI的屏幕截图

enter image description here

我有以下问题:

  1. 如果显示应用的UI,最好的方法是找到元素。
  2. 我应该自动化哪个应用程序才能学习appium。
  3. 如果应用的UI总是在变化,如何自动化应用
  4. 请帮忙!提前致谢。

4 个答案:

答案 0 :(得分:2)

  1. 在应用中找到元素的最佳(或者说最快)方法是使用 resource-id 。如果 resource-id 不可用/相同,则必须使用 xpath

  2. 找到它
  3. 如果你想学习 Appium ,你可以从 Mukesh Otwani 开始学习这些教程,这里是link

  4. 如果用户界面不断更新解决方法,请继续使用更改来更新脚本。

  5. 希望它有所帮助!

答案 1 :(得分:1)

在这里,我看到元素有一个资源ID。为什么不使用它?

  1. 如果显示应用的用户界面,找到元素的最佳方法是什么。 总是,按资源ID查找元素是首选方法。因为,它发现元素比xpath更快。此外,如果中间添加了元素,则xpath会发生变化,因为层次结构中的元素会发生变化。

  2. 我应该自动化哪个应用才能学习appium。 任何原生应用程序,首先使用appium为iOS提供UICatalog,为Android提供playstore应用程序。

  3. 如果应用程序的UI始终发生变化,如何自动化应用程序 用于自动化UI应用程序的可扩展解决方案涉及创建页面对象,在一个位置维护定位器而不是在测试用例中展开等等。它取决于更改的大小,是导航已更改,元素层次结构已更改等基于资源ID的选择始终是首选,如果应用程序中存在布局更改,则会减少自动化脚本的更改。但我担心没有一种方法可以解决这个问题。

答案 2 :(得分:1)

如果您有多个具有相同资源ID的UI元素,则可以使用索引和resource-id。

WebElement element=driver.findElements(By.id("your_id")).get(1);

答案 3 :(得分:0)

在android中如果视图是任何类型的列表视图,则所有元素都将具有相同的id,因此在这种情况下,您可以使用该名称来点击它,或者您可以创建xpath并使用它来执行您的操作