zoukankan      html  css  js  c++  java
  • Appium_课堂笔记05

      1 # TouchAction:
      2 1、链式调用,支持的方法有 press,longpress,moveto,release
      3 2、perform 调用
      4 
      5 # 九宫格只是TouchAction的一个用法
      6 swipe,appium 官方实现了swipe
      7 
      8 # APP H5 测试/webview
      9 1、首先必须要开启APP的webview 调试模式,找开发
     10 2、必须要切换 context 环境 NATIVE_APP,WEBVIEW_
     11 3、chromefriver 手机浏览器的驱动 确定手机浏览器的版本 --> uctool,68
     12 4、指定驱动的位置,caps 参数:chromedriverExecutable
     13 
     14 # 手机上输入快捷键
     15 物理按键 Home ,音量+,音量-,电源键,返回键,菜单键
     16 # https://www.jianshu.com/p/f7ec856ff56f--指导说明
     17 # 层级封装
     18 1、封装Keys 类 类属性表示keycode :ENTER -66
     19 2、用的很多物理按键,直接basepage 再次封装
     20 # 放大和缩小的封装:
     21 class BasePage():
     22     def __init__(self, driver):
     23         self.driver = driver
     24 
     25     def zoom(self, offset):
     26         """放大"""
     27         action_1 = TouchAction(self.driver)
     28         action_1.press(x=self.width / 2, y=self.height / 2).move_to(
     29             x=self.width / 2, y=self.height / 2 - offset).release()
     30         action_2 = TouchAction(self.driver)
     31         action_2.press(x=self.width / 2, y=self.height / 2).move_to(
     32             x=self.width / 2, y=self.height / 2 + offset).release()
     33 
     34         m = MultiAction(self.driver)
     35         m.add(action_1, action_2)
     36         m.perform()
     37 
     38 
     39     def pinch(self, offset):
     40         """缩小"""
     41         action_1 = TouchAction(self.driver)
     42         action_1.press(x=self.width / 2, y=self.height / 2 - offset).move_to(
     43             x=self.width / 2, y=self.height / 2).release()
     44         action_2 = TouchAction(self.driver)
     45         action_2.press(x=self.width / 2, y=self.height / 2 + offset).move_to(
     46             x=self.width / 2, y=self.height / 2).release()
     47 
     48         m = MultiAction(self.driver)
     49         m.add(action_1, action_2)
     50         m.perform()
     51 
     52 
     53 a1 = TouchAction(driver)
     54 a2 = TouchAction(driver)
     55 a1.press().move_to().release()
     56 a2.press().move_to().release()
     57 MultiAction(driver).add(a1, a2).perform()
     58 # 物理按键
     59 class Keys:
     60     # 音量+
     61     VOLUME_UP = 24
     62     VOLUME_DOWN = 25
     63     ENTER = 66
     64 
     65 
     66 class BasePage():
     67     def __init__(self, driver):
     68         self.driver = driver
     69 
     70     def volume_up(self):
     71         self.driver.press_keycode(Keys.VOLUME_UP)
     72 
     73     def volume_down(self):
     74         self.driver.press_keycode(Keys.VOLUME_DOWN)
     75 
     76 
     77 
     78 # 按下物理按键
     79 driver.press_keycode(26)
     80 
     81 # 按下音量加
     82 driver.press_keycode(Keys.VOLUME_UP)
     83 driver.press_keycode(Keys.VOLUME_UP)
     84 driver.press_keycode(Keys.VOLUME_UP)
     85 driver.press_keycode(Keys.VOLUME_UP)
     86 # toast弹窗
     87 from appium.webdriver import Remote
     88 from appium.webdriver.common.mobileby import MobileBy
     89 from appium.webdriver.common.touch_action import TouchAction
     90 from selenium.webdriver.common.by import By
     91 
     92 caps = {
     93     'platformName': 'Android',
     94     'deviceName': 'emulator-5554',
     95     'appPackage': 'com.lemon.lemonban',
     96     'appActivity': 'com.lemon.lemonban.activity.WelcomeActivity',
     97     'chromedriverExecutable': 'D:chromedriverchromedriver_242.exe'
     98 }
     99 driver = Remote(command_executor='http://127.0.0.1:4723/wd/hub',
    100                 desired_capabilities=caps)
    101 driver.implicitly_wait(10)
    102 
    103 # toast 弹框定位文本, 方法一:通过 text 文本定位 toast 弹框
    104 text = '用户名或者密码不正确'
    105 driver.find_element(By.XPATH, f'//*[contains(@text, "{text}")]')
    106 
    107 # 方法二://android.widget.Toast
    108 el = driver.find_element(By.XPATH, '//android.widget.Toast')
    109 el.text
    110 conftest.py
    111 import pytest
    112 from appium.webdriver import Remote
    113 
    114 @pytest.fixture()
    115 def driver():
    116     """启动和结束appium 对象"""
    117     caps = {
    118         'platformName': 'Android',
    119         'automationName': 'Uiautomator2',  # 必须要加才能定位 toast
    120         'deviceName': 'emulator-5554',
    121         'appPackage': 'com.lemon.lemonban',
    122         'appActivity': 'com.lemon.lemonban.activity.WelcomeActivity',
    123         'chromedriverExecutable': 'D:chromedriverchromedriver_242.exe'
    124     }
    125     session = Remote(command_executor='http://127.0.0.1:4723/wd/hub',
    126                     desired_capabilities=caps)
    127     session.implicitly_wait(10)
    128     yield session
    129     session.quit()
    130 # TouchAction 是一个手指的操作
    131 # MultiAction
    132 
    133 # 实战:
    134 1、APP自动化和web自动化吃,几乎所有的自动化测试思维都是通用的
    135 2、因为APP和web都是UI测试,测试界面内容
    136 3、app是的的一些方法不一样
    137 
    138 # 测试项目
    139 1、柠檬班app 调试版的apk
    140 2、自己公司的app
    141 # APP自动化的区别
    142 一、
    143 1、就是普通用户无法直接进入指定页面 app 当中有路径依赖关系
    144 2、当然如果你只想测试页面的行为,可以跳跳转 start_activity
    145 
    146 二、
    147 po 模式一般不以 acitivity 页面,而是使用功能相关的管理
    148 
    149 # 怎样快速入手APP自动化:
    150 1、运用自己学习到的代码;首页自我吸收;实践运用;
    151 2、在编写脚本,运行,调试报错,运用翻译工具;查看,解决;自己记录问题的解决方法;多处理问题;多上手;效果更明显
    152 3、多使用几个APP去调试写脚本;首先是自己公司的,业务逻辑自己清楚;
    153 4、在自己面试前找自己对用的公司APP来写脚本;比如:直播app,贷款app,电商app等多练手;
    154 5、自我培养编程的思维习惯;熟能生巧,多想想自己的代码是否还能进行优化?
    # 框架结构几乎与selenium框架通用:
    但是框架在迁移的时候:需要修改一些配置文件:ini的参数
      没有截图的功能模块需要删除;page目录下的;或者有的路径拼接不一样的地方也要适当的做修改
      测试用例:写在tests里面:
    可以把测试用例的步骤输出:
    """测试步骤:app 当中按正常流程有没
    1、点击我的柠檬
    2、点击头像登录
    3、输入用户名和密码
    4、点击登录
    把定位的方式用函数封装起来
    比如:
    page = BasePage(driver)
    # 点击我的柠檬额
    my_locator = (By.XPATH, '//*[@resource-id="com.lemon.lemonban:id/navigation_my"]')
    page.click(my_locator)
    断言 toast 弹框
    assert page.get_toast('用户名或者密码错误')
    
    
  • 相关阅读:
    嵌入式Linux设备驱动编程(1):基础
    嵌入式Linux网络编程
    Linux进程间通信(5):消息队列
    Android网络通信(2):HTTP通信
    Android网络通信(3):Socket通信
    Android网络通信(5):WiFi
    Linux任务、进程和线程
    Android程序的安装和卸载
    Android网络通信(4):WebKit
    Android网络通信(1):Android网络基础
  • 原文地址:https://www.cnblogs.com/zhang-ping1205/p/14635378.html
Copyright © 2011-2022 走看看