2017-04-06 89 views
0

我有一個Android應用程序和Appium自動化的可滾動列表(搜索結果),我需要從中選擇一個特定的元素。 Appium檢查員正在提供諸如index,resource-id和xpath之類的信息。xPath for Android中的上市元素(使用appium自動化)

content-desc: 
type: android.widget.TextView 
text: AMI 
index: 0 
enabled: true 
location: {60, 513} 
size: {81, 61} 
checkable: false 
checked: false 
focusable: false 
clickable: false 
long-clickable: false 
package: com.abc.xyz.debug 
password: false 
resource-id: com.abc.xyz.debug:id/student_label_text 
scrollable: false 
selected: false 

XPath來第一結果(由appium檢查員提供)是這樣的:

//android.support.v7.widget.RecyclerView[1]/android.widget.FrameLayout[1] /android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.LinearLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget。 RelativeLayout的[1] /android.widget.LinearLayout [1] /android.widget.LinearLayout [1] /android.widget.TextView [1]

爲塞康D轉換結果是..

//android.support.v7.widget.RecyclerView[1]/android.widget.FrameLayout[2]/android.widget.FrameLayout[1]/android.widget.LinearLayout [1] /android.widget.LinearLayout [1] /android.widget.LinearLayout [1] /android.widget.FrameLayout [1] /android.widget.RelativeLayout [1] /android.widget.LinearLayout [1] /機器人.widget.LinearLayout [1] /android.widget.TextView [1]

上面的xPaths工作,但我正在尋找更短的版本。我嘗試了各種組合,但由於我是新手,所以無法找出解決方案。任何關於這個或任何可以完成這項工作的工具的幫助?

+1

u能提供最後一個TextView.properties在appium inspector中顯示的細節 – SaiPawan

+0

@sai更新信息 – TestingWithArif

+0

檢查答案 – SaiPawan

回答

1

Xpath的最佳選擇通常是在元素的任何屬性中找到唯一值。從你的示例值,您可以通過文本價值發現:

driver.findElement(By.xpath("//android.widget.TextView[@text='AMI']")); 

由於XPath是比其他查找策略較慢,你能先取得所有ID匹配,之後檢查什麼屬性值的那些元素有元素:

List<MobileElement> elements = driver.findElements(By.id("com.abc.xyz.debug:id/student_label_text")); 
for (MobileElement element : elements) { 
    if (element.getAttribute("text") == "AMI") { 
     element.click(); 
    } 
} 

請注意,我使用findElements而不是findElement來獲取所有匹配元素的列表。

的getAttribute命令的用法是不是非常有據可查。它採取了一些挖掘,以找出所有接受名稱的屬性:

https://github.com/appium/appium-android-bootstrap/blob/master/bootstrap/src/io/appium/android/bootstrap/AndroidElement.java#L182

https://github.com/appium/appium-android-bootstrap/blob/master/bootstrap/src/io/appium/android/bootstrap/AndroidElement.java#L94

1

而不是XPath,你可以使用正確的id。

使用XPath會影響我們的scripts.We的執行可以使用ID的速度,如下圖所示:相比於ID來識別元素

driver.findElement(By.id("student_label_text")) 

的XPath會花費太多時間。

+0

I trie那之前。問題是我有相同的ID多個結果。所以如果我使用它,它會返回多個結果(#可能會有所不同)。 xPath似乎更好,因爲我可以根據需要選擇第一個或第二個結果。 – TestingWithArif

+1

然後你可以使用driver.findElements(By.id(「com.abc.xyz.debug:id/student_label_text」))。get(0)獲得第一個。像這樣你可以做,而不是xpath.Because xpath是不建議 – SaiPawan

+0

謝謝。我會嘗試並更新。 – TestingWithArif

相關問題