APP元素定位和操作
webdriver 提供了八種元素定位方法:
在 Python 語言中對應的定位方法如下:
find_element_by_id()
find_element_by_name()
find_element_by_class_name()
find_element_by_tag_name()
find_element_by_link_text()
find_element_by_partial_link_text()
find_element_by_xpath()
find_element_by_css_selector()
Appium 完全繼承了 WebDriver 中所定義的這些方法,除此之外對其進行了擴展,以便適合移動端對象的定位與操作
定位詳解
1.常用定位方式:
通過id定位
(取resource-id的值):
driver.find_element_by_id("com.wuba.zhuanzhuan:id/azo")
也可以直接用id后面的內容driver.find_element_by_id("azo")
通過class_name定位
(取class的內容)
driver.find_element_by_class_name("android.widget.RelativeLayout")
通過xpath定位
(取xpath得內容)
driver.find_element_by_xpath("//android.widget.LinearLayout[1]/android.widget.XXX")
通過text定位
(需要使用uiautomator的定位方式,使用text的內容)
driver.find_elements_by_android_uiautomator("new UiSelector().text(\"+關注\")")
使用這里需要注意一下,通過text定位的結果是個list,不能直接click。所以如果要點擊需要取數組的值,比如下面是點擊找到的第一個元素
driver.find_elements_by_android_uiautomator("new UiSelector().text(\"+關注\")")[0].click()
通過css_selector定位(webview)
只適用於webview的html頁面,繼承自webdriver,與pc版本的UI測試一致
driver.find_element_by_css_selector()
通過link_text定位(webview)
只適用於webview容器中的html頁面,繼承自webdriver,與pc版本的UI測試一致
driver.find_element_by_link_text()
通過name定位
web view容器中的html頁面可以用name定位,native並沒有name屬性
driver.find_element_by_name()
2.定位元素的另一種寫法:find_element(by,value)
find_element_by_方式(value)實際調用的都是find_element(by,value)
需要導入這個包:from selenium.webdriver.common.by import By
例如:定位id為ag2的元素
方式一:driver.find_element_by_id("ag2”)
方式二:driver.find_element(By.ID,"ag2")
這個操作的好處是可以直接把操作的by和value放到一個元組里,然后調用通用方法來傳參獲得元素結果
cateid=(By.ID,"ag2")
driver.find_element(*cateid).click()
by的操作可以是:
By.ID 相當於by_id
By.CLASS_NAME 相當於by_class_name
By.XPATH 相當於by_xpath
By.NAME 相當於by_name
By.TAG_NAME 相當於by_tag_name
By.CSS_SELECTOR 相當於by_css_selector
By.LINK_TEXT 相當於by_link_text
3.find_elements_by_定位方式(value)返回元素數組
用法與find_element_by_方式(value)一致,但是返回一個數組。可以通過數組的索引來訪問具體的某個結果
例如:通過class_name定位到多個元素,我想點擊第一個元素
driver.find_elements_by_class_name("android.widget.RelativeLayout”)[0].click()
4.返回元素數組的另一種寫法:find_elements(by,value)
用法與find_element(by,value)一致,但是返回一個數組。可以通過數組的索引來訪問具體的某個結果
例如:通過class_name定位到多個元素,我想點擊第一個元素
driver.find_elements(By.CLASS_NAME,"android.widget.RelativeLayout”)[0].click()
5.通過元素定位元素
可以先找到某個元素,然后再進一步定位元素
find_element_by_class_xpath(“xxx”).find_element_by_name(“yyy")