標籤:rem inpu linear time ons appium 進入 sel cap
最近在學習自動化架構appium,網上找一些API相關資料整理了一下
1.find_element_by_id
find_element_by_id(self, id_):
Finds element within this element‘s children by ID(通過元素的ID定位元素)
:Args: - id_ - ID of child element to locate.
用法 driver. find_element_by_id(“id”)
find_element_by_id方法,是對於那些有id而且可以互相區分的控制項的操作使用,一般通過android sdk 的tools路徑下的uiautomatorviewer.bat內建工具來擷取,
使用這個工具首先要確保前面環境配置ok,然後確定測試機器或android模擬器處於串連狀態(cmd上輸入adb devices),下面是使用uiautomatorviewer.bat工具
擷取resource-id
代碼舉例:
#點擊天氣應用driver.find_element_by_id(‘com.huawei.android.totemweather:id/mulan_widget_currentweather_smallicon‘).click()
2.find_element_by_xpath
find_element_by_xpath(self, xpath):
Finds element by xpath(通過Xpath定位元素,詳細方法可參閱http://www.w3school.com.cn/xpath/ )
```:Args:xpath - xpath of element to locate. "//input[@class=‘myelement‘]"Note: The base path will be relative to this element‘s location.This will select the first link under this element.::myelement.find_elements_by_xpath(".//a")However, this will select the first link on the page.::myelement.find_elements_by_xpath("//a")```
用法 find_element_by_xpath(“//*”)
find_element_by_xpath方法也需要使用uiautomatorviewer.bat工具來定位控制項,如所示右邊相機控制項id為空白,這時就需要使用xpath來定位元素了,
我們可以使用xpath用text和index來定位元素,可以這樣定位相機:
driver.find_element_by_xpath("//android.widget.TextView[contains(@text,‘相機‘)]")driver.find_element_by_xpath("//android.widget.TextView[contains(@index,8)]")
如的圖庫那個控制項index和天氣溫度控制項是相同的,都是index=7,就只能用text或text與index結合了,如:
driver.find_element_by_xpath("//android.widget.TextView[contains(@text,‘圖庫‘)]")driver.find_element_by_xpath("//android.widget.TextView[contains(@text,‘圖庫‘)[email protected]=‘7‘]")
上面的代碼就可以這樣寫
# -*-coding=utf-8 -*-from appium import webdriverimport timedesired_caps = {‘platformName‘ : ‘Android‘,‘deviceName‘ : ‘76P4C15813005463‘,‘platformVersion‘ : ‘5.1‘,#測試apk包名‘appPackage‘ : ‘com.huawei.android.launcher‘,#測試apk的launcherActivity‘appActivity‘ : ‘.Launcher‘,}#進入android系統launcherdriver = webdriver.Remote(‘http://127.0.0.1:4723/wd/hub‘,desired_caps)time.sleep(5)#從launcher主介面進入相機應用並退出的兩種方法driver.keyevent(‘3‘)#xpath使用text定位控制項driver.find_element_by_xpath("//android.widget.TextView[contains(@text,‘相機‘)]").click()time.sleep(2)driver.keyevent(‘3‘)time.sleep(2)#xpath使用index定位控制項driver.find_element_by_xpath("//android.widget.TextView[contains(@index,8)]").click()time.sleep(2)driver.keyevent(‘3‘)time.sleep(2)#從launcher主介面進入圖庫應用並退出的兩種方法#xpath使用text定位控制項driver.find_element_by_xpath("//android.widget.TextView[contains(@text,‘圖庫‘).click()time.sleep(2)driver.keyevent(‘3‘)time.sleep(2)#xpath使用text與index一起定位控制項driver.find_element_by_xpath("//android.widget.TextView[contains(@text,‘圖庫‘)[email protected]=‘7‘]").click()time.sleep(5)driver.keyevent(‘3‘)time.sleep(2)driver.quit()
3. find_element_by_name
find_element_by_name(self, name):
Finds element within this element‘s children by name【通過元素Name定位(元素的名稱屬性text)】
:Args: - name - name property of the element to find.
用法: driver.find_element_by_name(“name”)
find_elements_by_name方法的控制項元素也需要使用uiautomatorviewer.bat工具來定位,如上面例子中帶有text資訊的控制項就可以直接使用,如
driver.find_element_by_xpath("//android.widget.TextView[contains(@text,‘相機‘)]")driver.find_element_by_xpath("//android.widget.TextView[contains(@index,8)]")
可以使用
driver.find_element_by_name(‘相機‘)
指令碼如下
from appium import webdriverimport timedesired_caps = {‘platformName‘ : ‘Android‘,‘deviceName‘ : ‘76P4C15813005463‘,‘platformVersion‘ : ‘5.1‘,#測試apk包名‘appPackage‘ : ‘com.huawei.android.launcher‘,#測試apk的launcherActivity‘appActivity‘ : ‘.Launcher‘,}#進入android系統launcherdriver = webdriver.Remote(‘http://localhost:4723/wd/hub‘,desired_caps)time.sleep(5)#name方法進入相機應用time.sleep(2)driver.find_element_by_name("相機").click()time.sleep(5)driver.quit()
4. find_element_by_class_name
find_element_by_class_name(self, name):
Finds element within this element‘s children by class name(通過元素class name屬性定位元素 )
:Args: - name - class name to search for.
用法 driver. find_element_by_class_name(“android.widget.LinearLayout”)
find_element_by_class_name方法其實很不實用,一般控制項的class基本相同,如上面的應用控制項class都是android.widget.TextView,所以不好區分元素。
5. find_element_by_link_text
find_element_by_link_text(self, link_text):
Finds element within this element‘s children by visible link text.通過元素可見連結文本定位:Args:- link_text - Link text string to search for.用法 driver.find_element_by_link_text(“text”)
6. find_elements_by_link_text
find_element_by_link_text(self, link_text):
Finds a list of elements within this element‘s children by visible link text通過元素可見連結文本定位,含有該屬性的所有元素:Args:- link_text - Link text string to search for.用法 driver.find_elements_by_link_text(“text”)
7. find_element_by_partial_link_text
find_element_by_partial_link_text(self, link_text):
8. find_element_by_tag_name
find_element_by_tag_name(self, name):
Finds element within this element‘s children by tag name.通過尋找html的標籤名稱定位元素:Args:- name - name of html tag (eg: h1, a, span)用法 driver.find_element_by_tag_name(“name”)
9. find_element_by_css_selector
find_element_by_css_selector(self, css_selector):
‘Finds element within this element‘s children by CSS selector.通過CSS選取器定位元素:Args:- css_selector - CSS selctor string, ex: ‘a.nav#home‘
’
10. find_element_by_ios_uiautomation
find_element_by_ios_uiautomation(self, uia_string):
Finds an element by uiautomation in iOS.通過iOS uiautomation尋找元素:Args:- uia_string - The element name in the iOS UIAutomation library:Usage:driver.find_element_by_ios_uiautomation(‘.elements()[1].cells()[2]‘)用法dr. find_element_by_ios_uiautomation(‘elements’)
11. find_element_by_accessibility_id
find_element_by_accessibility_id(self, id):
Finds an element by accessibility id.通過accessibility id尋找元素:Args:- id - a string corresponding to a recursive element search using theId/Name that the native Accessibility options utilize:Usage:driver.find_element_by_accessibility_id()用法driver.find_element_by_accessibility_id(‘id’)
學習地址:
http://blog.csdn.net/bear_w/article/details/50330565
http://blog.csdn.net/bear_w/article/details/50330565
APPIUM API整理(python)---元素尋找