2016-06-15 124 views
2

我是新手appium。如何在appium中查找元素

我正在学习购物应用自动化appium (Flipkart)

我想选择元素第五元素“为您推荐折扣”名单。

为了做到这一点,我不得不使水平滚动伸手去找那个元素。但我有问题获取该容器元素“为您推荐的折扣”存在,因此我可以取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的总是越来越变

请帮助!提前致谢。

回答

1

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

  1. 如果显示应用的UI,最佳方法是找到元素。 始终,按资源ID查找元素是一种首选方法。因为它发现元素比xpath更快。另外,如果在它们之间添加了元素,则xpath会发生变化,因为层次结构中的元素会发生变化。

  2. 我应该自动化哪个应用程序才能学习appium。 任何本机应用程序,首先使用appium为iOS提供的UICatalog,以及来自android的playstore的应用程序。

  3. 如何自动化应用程序是否UI的总是越来越变 可扩展的解决方案,以自动化UI应用程序包括创建页面对象,定位器保持在一个地方,而不是通过传播出去了测试用例等,这取决于规模是否改变了导航,改变了元素层次结构等等。基于资源ID的选择始终是首选,这会减少自动化脚本中的更改,如果应用程序中存在布局更改。但恐怕没有单一的方法来解决这个问题。

+0

如果有多个资源具有相同的resource_id,该怎么办?因为我看到多个资源具有相同的resource_id – Ankur

+0

在RecyclerView中,项目通常具有相同的resourceIds,因为它们是相同的View。除非你使用独特的项目来填充RecyclerView,这将违背RecyclerView的意图。 – Daniel

2
  1. 最好的(或者更确切地说,最快)的方法来定位在该应用中的要素是使用资源-ID。如果资源ID不可用/你还是使用的XPath

  2. 如果你想通过以下教程由穆克什Otwani这里了解Appium你就可以开始找到它是link

  3. 如果用户界面不断更新,解决这个问题的唯一方法就是不断更新您的脚本。

希望它有帮助!

+0

如果有多个资源具有相同的resource_id,该怎么办?因为我看到多个资源具有相同的resource_id – Ankur

0

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

0

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

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