appium中元素的定位方式

上一篇 / 下一篇  2018-10-25 14:47:46 / 个人分类:appium

通过方式android_sdk.tools中的uiautomatorviewer.bat进行元素定位:

(1)双击uiautomatorviewer.bat

会出现UI Automator Viewer窗口,打开手机应用(如:360手机助手),

点击左上角图标会出现以下界面,手机会上传实时界面给UI Automator Viewer

关注两个字段:resource-id,class这两个字段。(如:我点击了“跳过”,就会有对应字段信息出现)

(2)假定我们的业务流程是,点击“下载”,进入下载管理界面。

流程分析:需要先找到“下载”的位置坐标,即唯一id;然后进行点击操作。

id我们在(1)中已经可以获取到,id = download_content_img

那么代码如下:

element1=driver.find_element_by_id(download_content_img)

element1.click()

 

注意点:

(1)首先我们要确定业务流程,我们要保证所要获取的id在当前界面且id为唯一id

(2)find_elements_by_id注意s

(3)如果不是唯一id,需要这样:

存在多个id的情况时,可以运用集合的概念,python中不能对一个集合或者列表做输出或者点击,从业务流程的角度确定“下载”是第几次操作,可以看出我们的上述业务中的“下载”是第一次操作,因此角标计作0

els=driver.find_elements_by_id('download_content_img')

els[0].click()

(4)find_element_by_idfind_elements_by_id差别

find_elements_by_id()和find_elements_by_class_name()通过这种方式找出来的元素肯定是多个的,但是python中不能对list列表或者集合做输出或者点击操作,因此需要使用到角标,角标从0开始(第一个元素id)。


如:

els=driver.find_elements_by_id('skip_view')

els[0].click()


find_element_by_id只能获取到唯一id。


(5)driver.implicitly_wait(10)time.sleep(10)差别

driver.implicitly_wait(10) 智能等待,程序等待10秒钟,直到找到这个id才停止或者超过10秒超时强制停止;然后继续执行后续代码。

time.sleep(10)非智能的等待,程序等待10秒,超时才继续执行后续代码。

(6)如何以一个编程的思维去找到正确的id,找到元素id仅仅是一个步骤而已,如何去优化这个步骤:

例如:

给定需求,点击“下载”按钮,进入下载界面,再点击“换一换”,更换应用。

常规代码如下,但是可能无法实现想要实现的需求,可能无法顺利执行:

els1=driver.find_element_by_id(download_content_img)

els1.click()

els2=driver.find_element_by_id(group_header_rght)

els2.click()

 

原因

a、“换一换”这个元素id可能不会那么顺利的被找到

b、如果两个元素的id都在同一个界面,就会出现问题

 

更改代码如下:

els1=driver.find_element_by_id(download_content_img)

els1.click()

while:

if driver.current_activity ==‘com.qihoo.appstore.home.LauncherActivity’:

break

els2=driver.find_element_by_id(group_header_rght)

els2.click()

 

 

 


TAG:

 

评分:0

我来说两句

Open Toolbar