最近总结了一些定位不到控件,或者定位到元素不能点击的问题,以及解决这些问题的方法,目前为止都可以定位到,弊端:运行效率比较慢,具体根据可自行百度安卓布局解析原理,这里不进行详细介绍。
首先使用uiautomatorviewer获取需要的classname如下图,classname即为: android.widget.TextView
获取到了classname后,会发现有很多控件都是这个classname,所以我们不能使用classname来获取到唯一控件,获取到的即为一组控件,代码如下:
CLASS_NAME=(By.CLASS_NAME , ' android.widget.TextView ' )
WebDriverWait( self .driver , 30 , 0.1 ).until(EC.presence_of_all_elements_located(CLASS_NAME))
list= self .driver.find_elements_by_class_name( ' android.widget.TextView ' )
time.sleep( 5 )
一定要使用等待将页面的元素都加载出来,否则在接下来的步骤可能会找不到我们需要定位的元素:
接下来我们在list的地方打个断点,然后使用debug模式运行:
注意一定要在list的地方或者之前打断点,目的就是为了查看list中的所有定位到的元素,当运行到list的时候,我们可以通过debug看到如下:
图中的list即为我们代码中的list,途中的标号如00,01,02,03。。。。。即为我们列表中获取到的元素,他们的classname全都是 android.widget.TextView ',我们点击开一个来查看:
如图,我们可以看到标号对应的location,其中标号就是列表的下标,location就是元素的坐标,我们可以到uiautomatorviewer中来找到我们需要的元素的坐标,然后来找到对应的location,这个location所在的标号即为我们需要的元素的下标,
上图就是通过坐标找到的对应的坐标,其列表下标为10
所以点击这个元素可以写成:
list[ 10 ].click() # 点击设置
time.sleep( 3 )
即可完成点击。
首先使用uiautomatorviewer获取需要的classname如下图,classname即为: android.widget.TextView
获取到了classname后,会发现有很多控件都是这个classname,所以我们不能使用classname来获取到唯一控件,获取到的即为一组控件,代码如下:
CLASS_NAME=(By.CLASS_NAME , ' android.widget.TextView ' )
WebDriverWait( self .driver , 30 , 0.1 ).until(EC.presence_of_all_elements_located(CLASS_NAME))
list= self .driver.find_elements_by_class_name( ' android.widget.TextView ' )
time.sleep( 5 )
一定要使用等待将页面的元素都加载出来,否则在接下来的步骤可能会找不到我们需要定位的元素:
接下来我们在list的地方打个断点,然后使用debug模式运行:
注意一定要在list的地方或者之前打断点,目的就是为了查看list中的所有定位到的元素,当运行到list的时候,我们可以通过debug看到如下:
图中的list即为我们代码中的list,途中的标号如00,01,02,03。。。。。即为我们列表中获取到的元素,他们的classname全都是 android.widget.TextView ',我们点击开一个来查看:
如图,我们可以看到标号对应的location,其中标号就是列表的下标,location就是元素的坐标,我们可以到uiautomatorviewer中来找到我们需要的元素的坐标,然后来找到对应的location,这个location所在的标号即为我们需要的元素的下标,
上图就是通过坐标找到的对应的坐标,其列表下标为10
所以点击这个元素可以写成:
list[ 10 ].click() # 点击设置
time.sleep( 3 )
即可完成点击。