APPIUM API整理(python)---元素查找
最近在学习自动化框架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,'图库')and@index='7']")
上面的代码就可以这样写
# -*-coding=utf-8 -*-
from appium import webdriver
import time
desired_caps = {
'platformName' : 'Android',
'deviceName' : '76P4C15813005463',
'platformVersion' : '5.1',
#测试apk包名
'appPackage' : 'com.huawei.android.launcher',
#测试apk的launcherActivity
'appActivity' : '.Launcher',
}
#进入android系统launcher
driver = 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,'图库')and@index='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 webdriver
import time
desired_caps = {
'platformName' : 'Android',
'deviceName' : '76P4C15813005463',
'platformVersion' : '5.1',
#测试apk包名
'appPackage' : 'com.huawei.android.launcher',
#测试apk的launcherActivity
'appActivity' : '.Launcher',
}
#进入android系统launcher
driver = 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 the Id/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