appium *** 作

appium *** 作,第1张

appium *** 作 1.获取driver属性
  • current_package,包名,aapt,元素定位给
  • current_activity,后面切换有用,==>url
  • context,上下文,web窗口切换,h5测试,获取上下文,driver.switch_to.context
  • contexts,所有的上下文,==>window_handlers
  • current_context,获取现在的上下文,获取当前窗口current_window_handler
  • page_source,源代码,html,driver.page_source
  • capabilities
  • device_time,设备时间
  • location,定位
# 获取现在的app页面的名称
print(driver.current_activity)
# 获取现在的app页面的源代码 xml
print(driver.page_source)
# 定位
print(driver.location)
# 获取caps参数信息
print(driver.capabilities)
# 获取窗口大小,屏幕尺寸
print(driver.get_window_size())
2.获取元素属性
  • el.rect,获取元素的尺寸,包括元素的宽度高度和起始点的坐标
  • el.text,获取元素的文本
  • el.get_attribute(),获取元素的属性值
el = driver.find_element("id", "com.lemon.lemonban:id/navigation_my")
# 获取元素的文本
print(el.text)
# 获取元素的尺寸,包含元素的高度宽度和起始点的坐标
print(el.rect)
3.用户 *** 作
  • el.click()
  • el.send_keys(),注意,appium中输入中文,必须要配置caps中的参数
    "unicodeKeyboard": True,
    "resetKeyboard": True,
    使用真机 *** 作时,需要修改手机配置的输入法后再进行输入
4.触屏 *** 作
  • tap,相当于全局的click,适合封装在basepage中
  • move_to
  • press
  • long_press
  • release
  • wait
  • flick
5.swipe滑动
  • driver.swipe()

 在 Appium 中提供 swipe() 方法来模拟用户滑动屏幕。

 swipe() 实现过程 是先通过在屏幕上标记两个坐标,然后再从开始坐标移动到结束坐标。

time.sleep(10)
# 滑动 *** 作
# get_window_size()获取屏幕尺寸
width = driver.get_window_size()['width']
height = driver.get_window_size()['height']
driver.swipe(start_x=width * 0.9, start_y=height * 0.5, end_x=width * 0.1, end_y=height * 0.5)
driver.swipe(start_x=width * 0.9, start_y=height * 0.5, end_x=width * 0.1, end_y=height * 0.5)
driver.swipe(start_x=width * 0.9, start_y=height * 0.5, end_x=width * 0.1, end_y=height * 0.5)

封装basepage代码:

class Page:

    def __init__(self, driver):
        self.driver = driver

    def width(self):
        """获取app的宽度"""
        return self.driver.get_window_size()['width']

    def height(self):
        """获取app的高度"""
        return self.driver.get_window_size()['height']

    def swipe_left(self):
        """从右往左滑动"""
        width = self.width()
        height = self.height()
        self.driver.swipe(start_x=width * 0.9, start_y=height * 0.5, end_x=width * 0.1, end_y=height * 0.5)

    def swipe_right(self):
        """从左往右滑动"""
        width = self.width()
        height = self.height()
        self.driver.swipe(start_x=width * 0.1, start_y=height * 0.5, end_x=width * 0.9, end_y=height * 0.5)

    def swipe_up(self):
        """从下往上滑动"""
        width = self.width()
        height = self.height()
        self.driver.swipe(start_x=width * 0.5, start_y=height * 0.9, end_x=width * 0.5, end_y=height * 0.1)

    def swipe_down(self):
        """从上往下滑动"""
        width = self.width()
        height = self.height()
        self.driver.swipe(start_x=width * 0.5, start_y=height * 0.1, end_x=width * 0.5, end_y=height * 0.9)

调用封装方法:

Page(driver).swipe_left()
6.按键 *** 作

先通过功能查对应的事件数字

driver.press_keycode(8)

按键的数字代表的意义可参考:

Appium---Android的keycode键值 - 简书

但是这样可读性很差,谁知道这个数字具体是什么意思呢?可以进行封装,增强可读性:

封装类:

class MobileKey:
    ENTER = 66
    VOLUME_UP = 24
    HOME = 3

调用封装类及属性:

driver.press_keycode(MobileKey.VOLUME_UP)
7.toastd框

前提

登录:Toast是viewer识别不到的,但是我们需要确认文本是否正确。

  • appium server 1.6.3以上
  • 代码中必须定制automationName为:UiAutomator2
  • UiAutomator2只支持安卓版本5.0+
  • jdk1.8 64位以上,配置JAVA_HOME环境变量

定位表达式

  • xpath定位://*[contains(@text,'手机号码格式不正确')]
  • find_element("xpath","//android.widget.Toast")
# 出现toastd框
el = driver.find_element('xpath', '//android.widget.Toast')
assert el.text == "手机号码格式不正确"
8.start_activity进入页面

app的路径依赖是很严重的,如果需要测试某个单纯的页面,但是进入这个页面有很长的路径,则会严重影响效率,而且路径过长,会让测试程序不稳定。

start_activity可以快速进入指定界面,只需要指定activity的名称。

获取当前页面的名称:

adb shell dumpsys activity | find "mResumedActivity"

driver.start_activity('com.lemon.lemonban','.activity.LoginActActivity')

9.混合应用测试Hybrid App

原生应用是使用系统原生的组件开发的app,需要特定的语言,比如android的java,ios的swift。

H5技术可以使用web技术开发app,原生和h5的组合就成了混合应用。

混合应用不是在app上直接写html页面,而是把H5页面放在一个webview控件当中。

webview是原生应用的一种控件,还有其他的imageview等等。webview能做到和web页面交互的功能。

常用的混合应用技术框架有:

  • Cordova Apache
  • React Native,RN
  • Ionic
  • Flutter,谷歌出的

如何判断进入一个web网页:

  • 进度条
  • 下拉页面,背面会出现一个网址
  • 有 X 图标
  • 通过辅助工具观察class是否为webview
  • 通过远程的网页定位工具(1.谷歌浏览器输入chrome://inspect;2.uc-devtools UC 开发者调试工具及使用;3.edge浏览器输入edge://inspect;三种都可以)是发现是不是进入webview最可靠的工具

注意点:

使用uc-devtools工具时【设置】选择:本地 Devtools Inspector UI 资源

混合应用测试准备条件:

  • apk设置,找开发开启webview调试模式。app设置setWebContentsDebuggingEnabled=True
  • Webdriver/chromedriver.exe(安卓内置谷歌内核,网页定位工具有显示手机端浏览器的版本号,下载的驱动版本号需要与手机端保持一致)

  • 调试工具

测试的步骤:

  1. 先是原生界面的 *** 作
  2. 某个时刻,进入了webview,此时就需要进行切换,从原生到webview
  3. 进行网页 *** 作
  4. 退回到原生环境,webview切换到原生界面

案例:

import time
from appium.webdriver import Remote

caps = {
    "platformName": "Android",
    "udid": "emulator-5554",
    "app": r"D:lemon_app_webview_debug.apk",
    "chromedriverExecuteDir": r"D:PycharmProjectschromedriver"
}

driver = Remote(command_executor='http://127.0.0.1:4723/wd/hub',
                desired_capabilities=caps)
# 隐性等待
driver.implicitly_wait(10)

# 找到师资团队的按钮
driver.find_element('xpath', '//*[@text="师资团队"]').click()

# 进入到webview网页环境
print(driver.contexts)
driver.switch_to.context("WEBVIEW_com.lemon.lemonban")
# driver.switch_to.context(driver.contexts[-1])

# 切换到的webview环境,此时driver表示浏览器
driver.find_element('xpath', "//*[@id='m-header__nav']").click()
time.sleep(3)

driver.quit()

注意事项:

  • chromedriver根据版本下载到某个目录
  • caps中使用属性chromedriverExecuteDir指定驱动的目录,如
    "chromedriverExecuteDir": r"D:PycharmProjectschromedriver"
  • 当从原生进入到网页后,driver.switch_to.context()

小程序和公众号 网页:

  • 在微信的原生页面 *** 作
  • 当点击进入小程序后,进行小程序环境(网页)
  • 切换 driver.switch_to.context()
  • 网页的自动化测试
10.总结appium *** 作app的重点
  • 元素定位,id,text,xpath
  • 辅助工具,appium inspector,uiautomatorviewer
  • 点击,输入 *** 作,swipe(封装),toast,start_activity
  • 混合应用

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5682317.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存