四、App控件定位

目录

  • android/ios基础知识
  • dom结构解读
  • id、 aid、 xpath定位方法
  • uiautomatorviewer定位工具使用

Android基础知识

  • Android是通过容器的布局属性来管理子控件的位置关系,布局过程就是把界面上的所有的控件根据他们的间距的大小,摆放在正确的位置

  • Android七大布局

    • LinearLayout(线性布局),包括水平结构和竖直结构,开发过程中使用最多
    • RelativeLayout(相对布局),首先定位第一个布局,然后根据第一个布局来定位第二个布局的间距和大小
    • FrameLayout(帧布局),一般用在布局的最底层,从(0,0)点开始的布局结构,开发过程中用的也很多
    • AbsoluteLayout(绝对布局),根据绝对坐标进行布局,一般不适用
    • TableLayout(表格布局),将页面的表格、文字放在表格里面进行布局
    • GridLayout(网格布局),与表格布局类似
    • ConstraintLayout(约束布局)
  • Android四大组件

    • activity:与用户交互的可视化界面,Android的每一个页面
    • service:实现程序后台运行的解决方案
    • content provider:内容提供者,提供程序所需要的数据
    • broadcast receiver:广播接收器,监听外部事件的到来(比如来电),以一个页面或消息通知的形式发出
  • 常用的控件:

    • TextView(文本控件)
    • EditText(可编辑文本控件)
    • Button(按钮)
    • ImageButton(图片按钮)
    • ToggleButton(开关按钮)
    • ImageView(图片控件)
    • CheckBox(复选框控件)
    • RadioButton(单选框控件)
  • 布局

    • 布局是一种可用于放置很多控件的容器,它可以按照一定的规律调整内部控件的位置,从而编写出精美的界面。当然,布局的内部除了放置控件外,也可以放置布局,通过多层布局的嵌套,我们就能够完成一些比较复杂的界面。


      image.png

ios基础知识

  • iOS介绍
    • 由苹果公司为iPhone开发的操作系统,主要给iPhone、iTouchi、Pad使用
    • 原名为iPhoneOS、2010年WWDC大会改名为iOS
    • 目前iOS最新版本是iOS14
  • 布局
    • iOS 去掉了布局的概念、直接用变量之间的相对关系完成位置的计算
  • 开发环境
    • 系统:MacOS x
    • 开发工具:Xcode
    • 开发语言:ObjectC
    • 安装文件:.ipa文件/ .app文件
  • 注意:
    • 使用Appium测试iOS应用需要使用MacOS操作系统

元素定位

  • 元素定位,实际上就是定位控件
  • 要想一个脚本同时支持android / iOS两个系统,就得保证元素属性(id、aid、xpath等)一致

控件基础知识

  • dom: Document Object Model文档对象模型

    • dom应用:最早应用于html和ljs的交互。用于表示界面的控件层级,界面的结构化描述,常见的格式为html、xml。核心元素为节点和属性
    • xpath: xml路径语言,用于xml中的节点定位
  • Android应用的层级结构与html不一样,是一个定制的xml

  • app source类似于dom,表示app的层级,代表了界面里面所有的控件树的结构

  • 每个控件都有它的属性(resourceid、xpath、aid),没有css属性

app dom例子

  • node
  • attribute
    • clickable
    • content-desc:使用accessibility_id定位
    • resource-id
    • text
    • bounds
  • iOS与Android的区别
    • dom属性和节点结构类似
    • 名字和属性的命名不同(比如: android resourceid , ios name , android content-des,ios accessibility-id)


      image.png

定位方法

  • 测试步骤三要素;
    • 定位、交互、断言
  • 定位方式:
    • id定位
      • driver.find_element_by_id(resource-id属性值)
      • driver.find_element(MobileBy.ID,"resource:id")accessibility _id定位
      • driver.find_element_by_accessibility_id(content-desc属性值)
      • driver.find_element(MobileBy.ACCESSIBILITY_ID," content_desc:属性")
    • xpath定位
      • driver.find_element_by_xpath(xpath属性值)
    • classname定位(不推荐)
  • https:/ / www.freeformatter.com/xpath-tester.html #ad-output格式化xml

实战代码

import pytest
from appium import webdriver

class TestLocator:
    def setup(self):

        desired_caps = {}
        desired_caps['platformName'] = 'Android'
        desired_caps['platformVersion'] = '6.0'
        desired_caps['deviceName'] = '127.0.0.1:7555'
        desired_caps['appPackage'] = 'com.xueqiu.android '
        desired_caps['appActivity'] = 'com.xueqiu.android.common.MainActivity'
        desired_caps['noReset'] = 'true'
        # desired_caps['dontStopAppOnReset'] = "true"
        desired_caps['skipDeviceInitialization'] = "true"
        """当要输入中文时需要以下两个参数"""
        desired_caps['unicodeKeyBoard']='true'
        desired_caps['resetKeyBoard']='true'
        self.driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", desired_caps)
        # 隐式等待
        self.driver.implicitly_wait(5)

    def teardown(self):
        # self.driver.back()
        self.driver.quit()

    def test_search(self):
        """
        1.打开雪球app
        2.点击搜索输入框
        3.向搜索输入框里面输入"阿里巴巴"
        4。在搜索结果里面选择"阿里巴巴",然后进行点击
        5.获取阿里巴巴的股价,并判断这只股价的价格 > 200
        """

        # 点击搜索框
        self.driver.find_element_by_id("com.xueqiu.android:id/home_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()
        # 获取到阿里巴巴股票的价格
        current_price = float(self.driver.find_element_by_id("com. xueqiu.android:id/current_price").text)
        assert current_price > 200

if __name__ == '__main__':
    pytest.main()

定位工具

  • uiautomatorviewer工具(only android)
    • 推荐使用
    • sdk路径下的工具
  • Appium inspector工具


    image.png

下一节:App控件交互,包括点击、输入、获取属性。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容