Python / Selenium:元素位置不正确

时间:2016-03-03 11:29:26

标签: android python selenium appium

我正在通过Python通过Appium / Selenium编写Android应用测试脚本。 有时,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中运行良好。

1 个答案:

答案 0 :(得分: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。(为了避免在加载时获取坐标)