appium自動化操作之元素定位方法全家桶(find_element_by、find_elements_by)


一、根據resource_id定位(resourceId等價於by_id)

1、find_element_by_id和find_elements_by_id

(1)單個resource_id操作
driver.find_element_by_id('XXXX').click()
(2)多個resource_id相同,想要操作指定的,根據索引

driver.find_elements_by_id('XXXX')[0].click()

2、find_element_by_android_uiautomator()之resource_id

find_element_by_android_uiautomator (‘new UiSelector().resourceId(“XXXX”)’).click()

3、發送文本: 

注意:在配置中加入

"unicodeKeyboard": True,
"resetKeyboard": True
driver.find_element_by_id('com.ss.android.ugc.aweme:id/ai4').send_keys('珍禽養殖山雞')

二、根據class定位

1、find_element_by_class_name和find_elements_by

driver.find_element_by_class_name('android.widget.ImageView').click()
driver.find_elements_by_class_name('android.widget.ImageView')[0].click()

2、find_element_by_android_uiautomator之class

find_element_by_android_uiautomator (‘new UiSelector().className(“XXXX”)’).click()

三、根據name定位

driver.find_element_by_name(u"未登錄")

四、根據bound定位

driver.tap([(51,136),(666,221)],100) #后面的100表示按住時間長度,單位毫秒

五、根據xpath定位

elems =driver.find_element_by_xpath("//android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.TabHost/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.ScrollView/android.widget.LinearLayout/android.support.v4.view.ViewPager/android.widget.FrameLayout/android.view.ViewGroup/android.support.v7.widget.RecyclerView/android.widget.RelativeLayout[3]")
elems.click()

driver.find_element_by_xpath("//*[@text='用戶']").click() # 點擊用戶欄

六、CSS定位

<input type="text" class="s_ipt" name="wd" id="kw" maxlength="100" autocomplete="off">
(1)通過id屬性定位,用#號表示id屬性
    driver.find_element_by_css_selector(“#kw”).click()
    driver.find_elements_by_css_selector()[index].click()
(2)css通過class屬性定位,用.表示class屬性
    driver.find_element_by_css_selector(".s_ipt").clear()
    driver.find_elements_by_css_selector(".s_ipt")[0].clear()

七、根據content-desc屬性值(使用content-desc的值定位,等價於accessibility_id)

driver.find_element_by_android_uiautomator (‘new UiSelector().description(“XXXX”)’).click()

八、text屬性值定位

driver.find_element_by_android_uiautomator (‘new UiSelector().text(“XXXX”)’).click() 正常匹配
driver.find_element_by_android_uiautomator (‘new UiSelector().textContains(“XXXX”)’).click() 模糊匹配
driver.find_element_by_android_uiautomator (‘new UiSelector().textStartsWith(“XXXX”)’).click() 開頭匹配

九、組合定位

(1)id與className
  driver.find_elements_by_android_uiautomator(‘new UiSelector().resourceId("%s").className("%s")’ % (self.tongxunlu_id, self.tongxunlu_class))[1].click()
(2)class與text
  driver.find_element_by_android_uiautomator(className("android.widget.TextView").text("互聯網")).click()
(3)id與text屬性組合
  driver.find_element_by_android_uiautomator(resourceId("com.baidu.yuedu:id/webbooktitle").text("互聯網")).click()

十、關系定位

1、父子定位childSelector
有時候不能直接定位某個元素,但是它的父元素很好定位,這時候就先定位父元素,通過父元素找子節點

#父子關系
childSelector son = 'resourceId("com.baidu.yuedu:id/rl_tabs").childSelector(text("互聯網"))'
driver.find_element_by_android_uiautomator(son).click()

2、兄弟定位fromParent
有時候父元素不好定位,但是跟他相鄰的兄弟元素很好定位,這時候就可以通過兄弟元素,找到同一父級元素下的子元素(fromParent方式定位如果兄弟元素是第一個元素,則是它自己;如果是其他元素,則是定位的它這個元素的上一個子元素!!)

#兄弟關系
fromParent brother = 'resourceId("com.baidu.yuedu:id/lefttitle").fromParent(text("互聯網"))' 
driver.find_element_by_android_uiautomator(brother).click()

十一、根據link_text()和partial_link_text定位

注意:link_text:只能使用精准的匹配(a標簽的全部文本內容)

(1)link_text:獲取hao123網站的12306超鏈接位置,並點擊超鏈接
  driver.find_element_by_link_text("12306").click()
(2)partial_link_text:獲取hao123網站的嗶哩嗶哩超鏈接位置,並點擊超鏈接
    driver.find_element_by_partial_link_text("嗶哩").click()

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM