一、根据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()