Python Appium 元素定位方法简单介绍

Python  Appium  元素定位

 

常用的八种定位方法(与selenium通用)

复制代码
# id定位
driver.find_element_by_id()
# name定位
driver.find_element_by_name()
# xpath定位
driver.find_element_by_xpath()
# class_name定位
driver.find_element_by_class_name()
# css 定位
driver.find_element_by_css_selector()
# link定位
driver.find_element_by_link_text()
# tag定位
driver.find_element_by_tag_name()
# partial_link定位
driver.find_element_by_partial_link_text()
复制代码

 

        # 移动端 新增方法
        # accessibility_id 定位
        driver.find_element_by_accessibility_id()
        # Android
        driver.find_element_by_android_uiautomator()
        # ios
        driver.find_element_by_ios_uiautomation()

 

id定位

 

# resrouce-id属性是id:
driver.find_element_by_id('username') 

 

 

 

name定位

 

# text属性是name

driver.find_element_by_name(u'请输入用户名')

 

 

Xpath定位

 如下图,使用 uiautomatorviewer.bat 获取页面元素

注意:SDK自带的uiautomatorviewer.bat无法获取xpath,需要替换一个jar包方可获取xpath。此jar包放到了QQ群:193056556中,有需要的可以进群自取。

 

self.driver.find_element_by_xpath("//android.widget.TextView[@text=' ']").click()

 

 

 

class_name定位

self.driver.find_element_by_class_name('android.view.View').click()

 (注:一般一个页面上的class属性不唯一,元素不唯一的话定位会报错了)

 

 

accessibility_id 定位

 content-desc即是对应的 accessibility_id

 

driver.find_element_by_accessibility_id(u"我的").click()

 

 

 

android_uiautomator 定位

 

driver.find_element_by_android_uiautomator('new UiSelector().resourceId("username")').clear()

 

以下是代码实例

 

复制代码
#测试异常登录-用户不存在

    def test_aNoUserLogin(self):

        driver  = self.driver
        time.sleep(5)
        driver.find_element_by_accessibility_id(u"我的").click()

        time.sleep(5)

        driver.find_element_by_accessibility_id(u"登录/注册").click()
        time.sleep(2)

        driver.find_element_by_android_uiautomator('new UiSelector().resourceId("username")').clear()

        time.sleep(2)
        driver.find_element_by_android_uiautomator('new UiSelector().resourceId("username")').send_keys('xzbuyer1')
        time.sleep(2)

        driver.find_element_by_android_uiautomator('new UiSelector().resourceId("password")').clear()

        time.sleep(2)
        driver.find_element_by_android_uiautomator('new UiSelector().resourceId("password")').send_keys('111111')

        time.sleep(2)

        driver.find_element_by_accessibility_id(u"登录").click()
        time.sleep(18)

        get_alertMessage = driver.find_element_by_id('android:id/message').text
        time.sleep(2)
        if get_alertMessage == u'用户不存在':
            print (u"用户不存在,用例执行成功!")
        else:
            print (u"用例执行失败!")


    def test_bNoPassLogin(self):

        driver  = self.driver
        time.sleep(5)
        driver.find_element_by_accessibility_id(u"我的").click()

        time.sleep(5)

        driver.find_element_by_accessibility_id(u"登录/注册").click()
        time.sleep(2)

        driver.find_element_by_android_uiautomator('new UiSelector().resourceId("username")').clear()

        time.sleep(2)
        driver.find_element_by_android_uiautomator('new UiSelector().resourceId("username")').send_keys('xzbuyer')
        time.sleep(2)

        driver.find_element_by_android_uiautomator('new UiSelector().resourceId("password")').clear()

        time.sleep(2)
        driver.find_element_by_android_uiautomator('new UiSelector().resourceId("password")').send_keys('1111112')

        time.sleep(2)

        driver.find_element_by_accessibility_id(u"登录").click()
        time.sleep(18)

        get_alertMessage = driver.find_element_by_id('android:id/message').text
        time.sleep(2)
        print (get_alertMessage[0:5])

        # if get_alertMessage == u'用户不存在':
        #     print u"用户不存在,用例执行成功!"
        # else:
        #     print u"用例执行失败!"
        #

    # 测试正常登录

    def test_cLogin(self):

        driver = self.driver
        time.sleep(5)
        driver.find_element_by_accessibility_id(u"我的").click()

        time.sleep(5)

        driver.find_element_by_accessibility_id(u"登录/注册").click()
        time.sleep(2)

        driver.find_element_by_android_uiautomator('new UiSelector().resourceId("username")').clear()

        time.sleep(2)
        driver.find_element_by_android_uiautomator('new UiSelector().resourceId("username")').send_keys('xzbuyer')
        time.sleep(2)

        driver.find_element_by_android_uiautomator('new UiSelector().resourceId("password")').clear()

        time.sleep(2)
        driver.find_element_by_android_uiautomator('new UiSelector().resourceId("password")').send_keys('111111')

        time.sleep(2)

        driver.find_element_by_accessibility_id(u"登录").click()
        time.sleep(2)

        # 判断是否登录成功

        print (driver.find_element_by_accessibility_id(u"西藏医药销售公司(测试买家)").get_attribute('name'))

        nickName = driver.find_element_by_accessibility_id(u"西藏医药销售公司(测试买家)").get_attribute('name')
        temp = nickName[0:2]
        print  (temp)
        if nickName == u'西藏医药销售公司(测试买家)':
            print ('登录成功!')

        else:
            print ('登录失败!')

    def tearDown(self):
        self.driver.close_app()
        self.driver.quit()
复制代码

 

posted @   Blue·Sky  阅读(6678)  评论(4编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
点击右上角即可分享
微信分享提示