【Appium】 课程全笔记(录播+直播课)链接:
Appium基础3(手势操作和uiautomator查找元素)
Appium的元素定位
普通方式的定位
- driver.find_element_by_accessibility_id() 对应content-desc
- driver.find_element_by_id() 对应resource-id
- driver.find_element_by_name() 对应text
- driver.find_element_by_xpath() 对应xpath
By的定位方式
- 首先要 from appium.webdriver.common.mobileby import MobileBy as By
- self.driver.find_element(By.ID,“”) 对应resource-id
- self.driver.find_element(By.XPATH,“”) 对应xpath
- self.driver.find_element(By.ACCESSIBILITY_ID,“”) 对应content-desc
- self.driver.find_element(By.NAME,“”) 对应text
Xpath的定位方式
- driver.find_element_by_xpath(“//*[@text=‘扫一扫’]”)
- driver.find_element_by_xpath(“//*[@resource-id=‘com.taobao.taobao:id/tv_scan_text’]”)
- driver.find_element_by_xpath(“//*[@content-desc=‘帮助’]”)
- driver.find_element(By.XPATH,“//*[@resource-id=‘com.xueqiu.android:id/name’ and @text=‘阿里巴巴’]”) and的使用
- 父类和兄弟类的方法://[@text=‘性别’]/…//[@text=‘男’]。其中/…表示父类,//*就是兄弟,孙子等类
- //*[Contains(@text,“tong”)] 这是xpath的text模糊搜索的方法
元素的方法
元素的常用方法
- 点击方法:element.click()
- 输入操作:element.send_keys(“tong”)
- 设置元素的值:element.set_value(“tongtong”)
- 清除操作:element.clear()
- 是否可见:element.is_displayed 返回true or false
- 是否可用:element.enabled() 返回true or false
- 是否被选中:element.is_selected() 返回true or false
- 获取属性值:element.get_attribute(name)
属性值介绍
- get_attribute(name)获取的属性名称和uiautomatorviewer的一致,但是index的值获取不了
- 真假获取的值是true和false的字符串,并不是python的boolean值
元素常用的属性
- 获取元素文本:element.text
- 获取元素坐标:element.location
- 结果:{‘y’:19,‘x’:498}
- 获取元素尺寸(高和宽):element.size
- 结果:{‘width’:500,‘height’:22}
小案例1
- 打开雪球app
- 点击搜索输入框
- 向搜索输入框输入“阿里巴巴”
- 在搜索的结果里选择阿里巴巴,然后点击
- 获取这只上香港 阿里巴巴的股价,并判断这只股价的价格>200
代码
from time import sleep
from appium import webdriver
from appium.webdriver.common.mobileby import MobileBy as By
class TestFind():
#设置caps的值
def setup(self):
self.desire_cap= {
#默认是Android
"platformName":"android",
#adb devices的sn名称
"deviceName":"127.0.0.1:7555",
#包名
"appPackage":"com.xueqiu.android",
#activity名字
"appActivity":".view.WelcomeActivityAlias",
"noReset":"true",
"unicodeKeyboard":True
}
#运行appium,前提是要打开appium server
self.driver=webdriver.Remote("http://127.0.0.1:4723/wd/hub",self.desire_cap)
self.driver.implicitly_wait(5)
def test_search(self):
"""
1.打开雪球app
2.点击搜索输入框
3.向搜索输入框输入“阿里巴巴”
4.在搜索的结果里选择阿里巴巴,然后点击
5.获取这只上香港 阿里巴巴的股价,并判断这只股价的价格>200
:return:
"""
sleep(3)
#点击搜索框
self.driver.find_element(By.ID,"com.xueqiu.android:id/tv_search").click()
#向搜索框输入阿里巴巴
self.driver.find_element(By.ID,"com.xueqiu.android:id/search_input_text").send_keys("阿里巴巴")
#找到搜索框预览结果的阿里巴巴,并点击
self.driver.find_element(By.XPATH,"//*[@resource-id='com.xueqiu.android:id/name' and @text='阿里巴巴']").click()
#选择HK股价的元素
prices=self.driver.find_elements(By.ID,"com.xueqiu.android:id/current_price")[1]
#提取股价的text属性
price=float(prices.text)
#判断股价是否大于200
assert price > 200
小案例2
-打开雪球首页
定位首页的搜索框
判断搜索框是否可用,并查看搜索框name属性值
打印搜索框这个元素的左上角坐标和它的宽高
向搜索框输入:alibaba
判断阿里巴巴是否可见
如果可见,打印搜索成功点击,如果不可见,打印搜索失败
代码
from time import sleep
from appium import webdriver
from appium.webdriver.common.mobileby import MobileBy as By
class TestFind():
#设置caps的值
def setup(self):
self.desire_cap= {
#默认是Android
"platformName":"android",
#adb devices的sn名称
"deviceName":"127.0.0.1:7555",
#包名
"appPackage":"com.xueqiu.android",
#activity名字
"appActivity":".view.WelcomeActivityAlias",
"noReset":"true",
"unicodeKeyboard":True
}
#运行appium,前提是要打开appium server
self.driver=webdriver.Remote("http://127.0.0.1:4723/wd/hub",self.desire_cap)
self.driver.implicitly_wait(5)
def test_element_function(self):
"""
1.打开雪球首页
2.定位首页的搜索框
3.判断搜索框是否可用,并查看搜索框name属性值
4.打印搜索框这个元素的左上角坐标和它的宽高
5.向搜索框输入:alibaba
6.判断阿里巴巴是否可见
7.如果可见,打印搜索成功点击,如果不可见,打印搜索失败
:return:
"""
sleep(8)
#找到搜索框的元素
search=self.driver.find_element(By.ID, "com.xueqiu.android:id/tv_search")
#当搜索框是可用(类似可点击)后才进行下面的操作,is_enabled()返回Ture or False
if search.is_enabled():
#打印搜索框的text值
print(search.text)
#打印搜索框左上角的坐标
print(search.location)
#打印搜索框的高和宽
print(search.size)
#点击搜索框,才可以进行下面的操作
search.click()
#在搜索框中输入阿里巴巴
self.driver.find_element(By.ID, "com.xueqiu.android:id/search_input_text").send_keys("阿里巴巴")
#定义找到预览结果的阿里巴巴的元素
alibaba=self.driver.find_element(By.XPATH, "//*[@resource-id='com.xueqiu.android:id/name' and @text='阿里巴巴']")
#当alibaba元素可见,打开搜索成功,否则打印搜索失败
if alibaba.is_displayed():
print("搜索成功")
else:
print("搜索失败")