【Appium】基础2(元素定位和元素常用方法)

【Appium】 课程全笔记(录播+直播课)链接:

Appium基础1(环境搭建和简介)

Appium基础2(元素定位和元素常用方法)

Appium基础3(手势操作和uiautomator查找元素)

Appium基础4(显式等待)

Appium基础5(toast和参数化)

Appium基础6(webview)

Appium_企业微信实战课1(非PO,增加和删除联系人)

Appium_企业微信实战课2(PO–增加联系人)


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

  1. 打开雪球app
  2. 点击搜索输入框
  3. 向搜索输入框输入“阿里巴巴”
  4. 在搜索的结果里选择阿里巴巴,然后点击
  5. 获取这只上香港 阿里巴巴的股价,并判断这只股价的价格>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("搜索失败")

2 Likes