APP自动化测试-7.移动端web app自动化测试

2023-11-16

APP自动化测试-7.移动端纯web应用测试



前言

移动端应用细分为三大类:Web App、Native App 和 Hybrid App


一、移动端应用分类简述

  1. Web App
  • Web App 指的是移动端的 Web 浏览器,其实和 PC 端的 Web 浏览器没有任何区别,只不过 Web 浏览器所依附的操作系统不再是 Windows 和 Linux 了,而是 iOS 和 Android

  • Web App 采用的技术主要是,传统的 HTML、JavaScript、CSS 等 Web 技术栈,当然现在 HTML5 也得到了广泛的应用。另外,Web App 所访问的页面内容都是放在服务器端的,本质上就是 Web 网页,所以天生就是跨平台的

  1. Native App
  • Native App 指的是移动端的原生应用,对于 Android 是 apk,对于 iOS 就是 ipa。Native App 是一种基于手机操作系统(iOS 和 Android),并使用原生程序编写运行的第三方应用程序

  • Native App 的开发,Android 使用的语言通常是 Java,iOS 使用的语言是 Objective-C。通常来说,Native App 可以提供比较好的用户体验以及性能,而且可以方便地操作手机本地资源

  1. Hybrid App
  • Hybrid App,俗称混血应用,是介于 Web App 和 Native App 两者之间的一种 App 形式

  • Hybrid App 利用了 Web App 和 Native App 的优点,通过一个原生实现的 Native Container 展示 HTML5 的页面。更通俗的讲法可以归结为,在原生移动应用中嵌入了 Webview,然后通过该 Webview 来访问网页

  • Hybrid App 具有维护更新简单,用户体验优异以及较好的跨平台特性,是目前主流的移动应用开发模式

二、web app基础配置

1. 基础信息获取

执行shell命令:

# 查看浏览器包名
adb shell pm list package | grep browser

# 查看浏览器版本号
adb shell pm dump com.android.browser | grep version

2. 驱动配置

在appium inspetor中不配置chromedriverExecutable直接运行手机的浏览器,如下:
在这里插入图片描述
运行之后,由于没有指定驱动,会提示配置对应版本的chromedriver,如下:

在这里插入图片描述
浏览器版本与驱动版本对照:浏览器与驱动版本对照表
驱动下载地址:下载地址

根据浏览器版本下载对应版本的驱动,解压chromedriver至指定的目录,然后添加配置项:

"chromedriverExecutable": "/path/chromedriver"

完整配置参数如下:

{
  "platformName": "android",
  "appium:deviceName": "emulator-5554",
  "browserName": "Browser",
  "appium:chromedriverExecutable": "/Users/username/tools/chromedriver"
}

3. 启动

配置完成后,可以直接使用get方法,访问对应的网址,完整示例代码如下:

from time import sleep

import pytest as pytest
from appium import webdriver
from appium.webdriver.common.appiumby import AppiumBy


class TestTouch:

    def setup(self):
        desired_caps = {
            "platformName": "android",
            "appium:deviceName": "emulator-5554",
            "browserName": "Browser",
            "appium:chromedriverExecutable": "/Users/gaozeyu/tools/chromedriver"
        }

        self.driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)

        # 设置隐式等待
        self.driver.implicitly_wait(3)

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

    def test_webapp(self):
        self.driver.get("https://m.baidu.com")
        sleep(3)

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

三、元素定位

在手机浏览器中无法使用uiautomator或者inspector进行定位,可以在pc端使用谷歌浏览器自带的功能进行定位

  • PC端打开谷歌浏览器,访问:chrome://inspect/#devices,显示如下页面

在这里插入图片描述

  • 移动端打开浏览器,访问:m.baidu.com,此时PC端chrome浏览器显示如下
    在这里插入图片描述
  • 点击inspect按钮,进行手机端画面同步操作(需要fq)
    在这里插入图片描述
  • 后续操作和selenium的元素定位,操作基本一致

代码示例:

from time import sleep

import pytest as pytest
from appium import webdriver
from appium.webdriver.common.appiumby import AppiumBy
from appium.webdriver.common.touch_action import TouchAction
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions
from selenium.webdriver.support.wait import WebDriverWait


class TestTouch:

    def setup(self):
        desired_caps = {
            "platformName": "android",
            "deviceName": "emulator-5554",
            "browserName": "Browser",
            "chromedriverExecutable": "/Users/gaozeyu/tools/chromedriver"
        }

        self.driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)

        # 设置隐式等待
        self.driver.implicitly_wait(10)

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

    def test_webapp(self):
        self.driver.get("https://m.baidu.com")
        self.driver.find_element(By.XPATH, '//*[@class="fake-placeholder"]').click()
        self.driver.find_element(By.ID, "index-kw").send_keys("北京")

        # 做一个显示等待
        search_btn = (By.ID, 'index-bn')
        WebDriverWait(self.driver, 10).until(expected_conditions.element_to_be_clickable(search_btn))
        self.driver.find_element(*search_btn).click()

        sleep(5)

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


总结

  1. web测试需要注意浏览器版本号与驱动版本号的匹配
  2. 测试过程中需要打开对应应用的webview调试模式
  3. 手机自带的浏览器webview调试无法打开,可以使用模拟器(如:网易mumu)进行模拟
  4. 模拟器出现卡死的情况,重新启动模拟器,然后使用adb kill-server和adb devices命令来重启
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

APP自动化测试-7.移动端web app自动化测试 的相关文章

随机推荐

  • 数据库的用户信息表设计

    用户信息表在很多情况下都需要有 属于一个项目开篇的基础 这个不搞好以后就会给自己带来麻烦 我参考该博文设计 浅谈数据库用户表结构设计 只是有些地方我实践之后需要补充一下 user表字段 user auth表 要补充说明的是 nickname
  • 2.Java设计模式-----抽象工厂模式(Abstract Factory Pattern)

    抽象工厂模式 Abstract Factory 是23种设计模式之一 抽象工厂模式是这样子定义的 抽象工厂模式 提供一个创建一系列相关或互相依赖对象的接口 而无需指定它们具体的类 在学习抽象工厂模式之前 最好熟悉简单工厂模式以及工厂方法模式
  • java微信小程序授权 获取用户信息、获取openid和session_key 获取用户unionId、(用户数据的签名验证和加解密)JAVA版

    更新 在18年4月25日小程序做了一次更新 小程序授权不再支持直接弹框获取用户信息授权了 微信小程序授权 获取用户信息里也做了说明 以下代码也已经做了更改 在实际的小程序开发中 往往需要用户授权登陆并获取用户的数据 小程序可以通过微信官方提
  • 贪吃蛇的初步尝试

    1 首先让贪吃蛇动起来 每输入一个方向字符 然后贪吃蛇朝那个方向移动一格 用 kbhit 函数可以让它朝一个方向一直移动 但那速度极快 于是用 speed 函数调整它的速度 达到每秒移动一格的效果 每一步的移动都用一个 for 循环实现 让
  • 学习如何使用最强大的 JavaScript 函数

    今天你将学习如何使用 最强大的 JavaScript函数 数组归约 Array reduce是最强大的 JavaScript Function 时期 reduce有什么作用 为何如此强大 这是reduce的技术定义 Array protot
  • Mybatis高性能批量插入方法

    当使用Mybatis大量插入时可以利用MySQL语句的特性使原来多次请求插入的语句变成一次请求 以此提高插入效率 一般的插入方式 1000条数据 一条一条的插入 Test public void testInsert SqlSession
  • 【rust/egui】(十)使用painter绘制一些图形—connections

    说在前面 rust新手 egui没啥找到啥教程 这里自己记录下学习过程 环境 windows11 22H2 rust版本 rustc 1 71 1 egui版本 0 22 0 eframe版本 0 22 0 上一篇 这里 绘制连接 在上一节
  • Invalid attempt to spread non-iterable instance

    这一类错误大概率是你的延展运算符附近除了错误 比如我的就是应为在一个对象前面用了延展运算符 我将数组的中括号写成了大括号 就报了这个错误
  • Mac 系统的 MySQL 如何修改密码(保姆级别教程)

    要修改 Mac 系统上的 MySQL 密码 可以按照以下步骤进行 打开终端 以管理员身份登录到 MySQL 服务器 sudo mysql u root p 输入管理员密码 切换到 MySQL 数据库 use mysql 查看当前用户列表 s
  • 记录的Android开发过程中遇到的问题。

    180508 更新 网上下载demo 本地studio版本和demo版本不一致处理方式 修改两处 1 项目的build gradle 里面classpath 2修改项目目录下 gradle gt wrapper gt gradle wrap
  • openpcdet验证已训练好权重文件

    python tools test py cfg file 配置文件路径 ckpt dir 权重文件所在文件夹路径 eval all
  • Java静态修饰符static

    1 Satic注意事项 1 Static修饰的方法可以被类调用或者直接使用 而未被static修饰的方法是实例方法 属于对象的 必须用对象调用 2 类在方法区 方法在栈内存 对象在堆内存 3 静态只能访问静态 不能访问实例 实例可以访问静态
  • windows7的5次shift实验

    原理 在win7的登录界面连续按5次shift键会弹出程序c windows system32 sethc exe 在开启win7时会出现正常登录和尝试修复 在尝试修复界面利用txt文本打开C盘 修改cmd exe为sethc exe 并将
  • FastDFS文件同步机制简介

    FastDFS文件同步机制简介 本篇文章转载于FastDFS作者 余庆 大佬的 FastDFS分享与交流 公众号 FastDFS 文件同步采用 binlog 异步复制方式 storage server 使用 binlog 文件记录文件上传
  • c语言警告文件末尾没有换行符,关于c ++:“文件末尾没有换行符”警告,即使在换行后也是如此...

    我最近一直在努力学习C 直到今天一直都很顺利 我正在尝试创建一个非常简单的应用程序 它基本上只是要求用户输入一个数字 然后显示该数字的阶乘 当我尝试在Cygwin中编译文件 g factorial cpp o fact 时 我收到以下警告
  • 微信小程序触底加载scroll-view

    微信小程序触底加载 scroll view 了解什么是触底加载 需求 有个固定高度的容器 实现容器里面的内容触底加载 1 内容盒子的高度 2 盒子里内容的总高度 3 滚动条的scrollTop 触底加载的原理就是 当里面的容器触底的时候进行
  • CPU核心数,线程数,时间片轮转机制解读

    CPU的核心数 CPU个数 是指物理上 即硬件上的核心数 核心数 是逻辑上的 简单理解为逻辑上模拟出的核心数 线程数 是同一时刻设备能并行执行的程序个数 线程数 cpu个数 核数 区分CPU线程数与JAVA多线程的概念 CPU线程数 在CP
  • 计算机的计算单位

    容量单位 在物理层面 高低电平记录信息 理论上只认识0 1两种状态 0 1能够表示的内容太少了 需要更大的容量表示方法 0 1称为bit 比特位 字节 1Byte 8bits 硬盘商一般使用10进位标记容量 500G一般格式化后只剩465G
  • Postgresql ODBC驱动,用sqlserver添加dblink跨库访问postgresql数据库

    在同样是SQLserver数据库跨库访问时 只需要以下方法 declare rowcount int set rowcount 0 set rowcount select COUNT from sys servers where name
  • APP自动化测试-7.移动端web app自动化测试

    APP自动化测试 7 移动端纯web应用测试 文章目录 APP自动化测试 7 移动端纯web应用测试 前言 一 移动端应用分类简述 二 web app基础配置 1 基础信息获取 2 驱动配置 3 启动 三 元素定位 总结 前言 移动端应用细