2016-03-03 60 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