2017-09-04 45 views
0

我面臨的問題是uiautomatorviewer中未顯示下拉列表元素。如何挖掘聚焦於appium的元素。無法選擇appium中的下拉列表的值

雖然我具有由屏幕的getPageSource並且存在還沒有值被暴露表示移動應用屏幕上顯示結果的檢查XML DOM

XML代碼段是如下: -

<android.widget.FrameLayout index="0" text="" class="android.widget.FrameLayout" package="com.demo.pass" content-desc="" checkable="false" checked="false" clickable="false" enabled="true" focusable="false" focused="false" scrollable="false" long-clickable="false" password="false" selected="false" bounds="[0,145][540,196]" resource-id="com.demo.pass:id/frameSearchLocation" instance="6"> 
    <android.widget.EditText index="0" text="Bryson City" class="android.widget.EditText" package="com.demo.pass" content-desc="" checkable="false" checked="false" clickable="true" enabled="true" focusable="true" focused="true" scrollable="false" long-clickable="true" password="false" selected="false" bounds="[30,145][510,196]" resource-id="com.demo.pass:id/autoCompleteSearchTextView" instance="0" /> 
    <android.widget.ImageView NAF="true" index="1" text="" class="android.widget.ImageView" package="com.demo.pass" content-desc="" checkable="false" checked="false" clickable="true" enabled="true" focusable="false" focused="false" scrollable="false" long-clickable="false" password="false" selected="false" bounds="[457,148][502,193]" resource-id="com.demo.pass:id/imgCurrentLocation" instance="0" /> 
</android.widget.FrameLayout> 

在第二個想法中,我嘗試了鍵盤操作。我可以導航到使用下面的代碼

ad.pressKeyCode(20); 

但我無法挖掘值。我已經嘗試了大部分的事情。如: -

ad.pressKeyCode(66); // Press Enter 

而且

TouchAction action = new TouchAction(ad); 
action.perform(); 

由於沒有存在於DOM爲下拉值沒有定位器,我無法通過在上面的代碼的元素。

至於有名稱框我也嘗試使用下面的代碼進行切換: -

ad.switchTo().frame(ad.findElement(By.xpath("com.demo.pass:id/frameSearchLocation"))); 

uiautomatorviewer屏幕: -

enter image description here

請建議我應該在這種情況下做的。 任何解決方案/建議將不勝感激。

+0

這是一個混合的應用程序?在這種情況下,可能會使用switchingContext來幫助您找到元素。 http://appium.io/slate/en/master/?java#automating-hybrid-apps – nullpointer

+0

nup it is build on java android .. –

+0

您所訪問的上下文看起來並不完全是本機的。在此屏幕上,您是否可以嘗試獲取contextHandles來檢查appium列出的內容。它可以更好地證明可用的上下文,以及是否需要切換。 – nullpointer

回答

-1

下面的代碼爲我工作

 By filter =By.xpath("MYLOCATOR"); 
     System.out.println("About to click on result"); 
     Point point = ad.findElement(filter).getLocation(); 
     int elementCenterX = point.getX() + 80; 
     int elementCenterY = point.getY() + 100; 
     System.out.println("value of x = "+elementCenterX+" value of y = "+elementCenterY); 
     ad.tap(2, elementCenterX , elementCenterY , 0); 

注: - 你需要調整X和Y按在上面的代碼中你的需求,並通過類似下拉的文本框中最近的定位。

希望它能幫助你:)

1

這是一個已知問題。我過去兩年一直在做Android App測試自動化。我多次遇到同樣的問題。不幸的是,uiAutomator沒有檢測到這些元素,所以我們無法對這些元素執行任何操作。

Appium內部發送命令uiAutomator和uiAutomatar執行設備執行的操作。如果uiAutomator看到這些元素,則uiAutomator可以執行操作。

因此,我建議你不要花太多的時間在使用TouchAction/Java腳本/ pagesource或XPath,因爲我已經嘗試過軟管解決方案,但沒有一次成功。

然而,您可以使用座標如果該元素存在於每一次(不建議如果在下拉菜單中的元素下不斷變化)的相同位置上的元素點擊。

+0

謝謝維諾。 。我已經使用座標來完成它,但是尋找一種更加穩健的替代方案,因爲您無法在協調器上進行中繼。即使我無法驗證下拉式存在,因此它在啓動時使自動化更加危險彈出虛假失敗 –

+0

如果Google發佈新版本的UiAutomator,我們可以檢查更新的版本。到目前爲止,沒有辦法檢測這些元素。 – Vinod