2016-03-03 61 views
0

我正在通過Python通過Appium/Selenium編寫Android應用程序測試腳本。 有時硒在測試過程中報告元素位置錯誤,但實際內容通過目視檢查是正確的。Python/Selenium:元素位置不正確

該應用程序的佈局是類似於:

android.widget.LinearLayout[contains(@resource-id,'com.xxx/Iv1')] 
android.widget.LinearLayout[contains(@resource-id,'com.xxx/Iv2')] 

其中 '器Iv1' 高於 'IV2'

的代碼來檢查錯誤:

elem = temp['wd'].find_element_by_id("com.xxx/Iv1") 
elem_LV = temp['wd'].find_element_by_id('com.xxx/Iv2') 
while (elem.location['y'] > elem_LV.location['y']): 
    logger.debug("e_Hide_Add_Toolbar: Misplace detected. Retry...") 
    sleep(1) 

一旦硒去堅果,位置總是錯誤的一秒睡眠等待循環。

我該如何從這種情況中恢復過來?

============================================== ==

更多的背景和有關此問題的

線索#1的信息: 這裏是座標

Nomral 
Thu, 03 Mar 2016 18:46:28 - [DEBUG] - script.py[line:87] : elem y: 1008, elem x: 80 
Thu, 03 Mar 2016 18:46:28 - [DEBUG] - script.py[line:88] : elem_LV y: 1118, elem_LV x: 120 
Abnormal 
Thu, 03 Mar 2016 18:50:23 - [DEBUG] - script.py[line:87] : elem y: 1168, elem x: 80 
Thu, 03 Mar 2016 18:50:23 - [DEBUG] - script.py[line:88] : elem_LV y: 1118, elem_LV x: 120 

有一個160個像素異常一個偏移的調試日誌。

線索#2: 該問題發現在10英寸的Android 5鍵盤上。 但是,當我試圖在另一臺設備上仔細檢查此問題時,它在運行Android M的Nexus 7中正常工作。

回答

0

因此,當您引用elem.location[<coordinate axis>]時,它會返回元素左上角的座標值(在您的案例中爲elem)。

瞭解您的 'Iv1' is above the 'Iv2'這一點,您可能想要比較它們的x軸座標。 由於0,0是您的左上角設備的角落,x軸向右延伸而y軸向下延伸。 編輯:您的代碼應工作有:

while (elem.location['y'] > elem_LV.location['y']): 
    logger.debug("e_Hide_Add_Toolbar: Misplace detected. Retry...") 
    sleep(1) 

難道你嘗試把wait你會發現之前的元素,有loacation代碼(爲了避免讓有座標,而他們裝載)

+0

。謝謝你的評論。但是,應該是X軸向右,Y軸在座標系中向下。 –

+0

噢,我在那邊糟糕。 – nullpointer

+0

已更新答案。 – nullpointer