2016-06-15 166 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);