移动Android和IOS自动化中常见问题

  1. APP测试逻辑

在app编写自动化测试用例时,通常会出现只是简单的点点点过程,然而却忽略了在实际的自动化实现过程中,软件是对app元素的判断来执行测试脚本。所以会出现在后期已经写好自动化脚本之后还会对测试用例的更新。

  1. App在测试时,每个页面的每个元素都需要点击测试其功能性,相同页面具有一致性,测试一次即可,但是相同按钮在不同页面,就需要再测试一次。
  2. Android怎么获取元素的值?其属性是什么?

答:Android也可以使用.getcondext获取元素的值,且获取的值属性为string类型。

  1. 如何正确使用可点击的id?

答:通常Android获取id时,截取“id:”后面的即可。如果只存在id值,不存在id属性通常有的前缀,这种情况下就无法通过id点击。则需要通过其他方式对元素进行点击。

  1. 如何判断当前页面是Native还是webview?

答:通过context获取当前的页面的类型。在有的页面,会出现h5被强转为Native页面,这时的页面则不支持webview操作,由于有的元素被隐藏,通过viewlist就很难点击到相应的元素,所以只能通过tap点击。

  1. 在点击之后或者页面跳转之后需要设置等待时间,使用sleep无效怎么办?

答:可以通过对静态元素(点击之后没反应的元素)进行重复点击,自带的sleep只有在不存在该元素时才会执行。

  1. Android自动化测试存在appium获取当前页面元素数据太大导致app卡死吗?

不会,数据量太大时,只是当前页面无法获取。

  1. Android自带键盘删除

newtest.clearById((AndroidDriver) driver,67,Id);

  1. 在IOS安装过程中,有什么需要注意的?

答:appium、Xcode下载的版本需要对应,各个版本都有不同的支持,同时还要注意测试机的版本,对应情况如下:

  1. 安装完成之后,如何配置环境变量?

答:mac本身是不存在环境变量配置文件的,需要新建。首先打开终端输入命令touch .bashprofile新建文件,然后输入命令vi .bash profile打开该文件,然后在文件内设置环境变量:  

export ANDROID_HOME=/Applications/Android-sdk-macosxexport APPIUM_HOME=/Applications/Appium.app/Contents/Resources/node_modules/export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Homeexport AAPT_HOME=/Applications/android-sdk-macosx/build-tools/export PATH=${PATH}:$ANDROID_HOME/tools:$ANDROID_HOME/platform-tools:$APPIUM_HOME/.bin:$AAPT_HOME/23.0.3/   (如果是在mac上面实现android的自动化就需要这句)

然后在退出编写的文件时注意,编写完成后按esc并输入wq再按ENTER以达到保存并退出,如果输入q则不保存直接退出。

  1. 如何查看新的软件的BundleID?

答:首先需要设置手机查看权限,在终端输入命令:sudo chmod –R 777 /var/db/lockdown/,在输入密码时,输入的密码不会显示,输入完成后直接ENTER;再输入:ideviceinstaller –l查看手机上软件的信息,即可显示软件的BundleID。

  1. 如何获取和判断元素的值?

答:获取元素的值为driver.findElementByXpath().getcondext。判断元素的值可分为完全判断和关键词判断,完全判断使用equals。但是在实际的很多地方,元素值往往很长,或者只有一些关键词不变,所以就需要使用contains进行关键词判断。

  1. IOS如何实现滑动操作?

答:由于appium的自身的限制,大概从1.3.7版本之后就不支持swipe操作,当前版本为1.4.13,因此在滑动方面存在很大约束。目前本人的操作是根据button属性的XPath路径点击,但是这样做是会出现报错并结束程序执行,因此使用try catch使程序继续执行,再根据得到的最新的显示页面对相应元素进行tap点击。由于很多需要滑动的页面不存在button属性的XPath,所以在滑动方面受到了很大的限制。以下代码可能适用于某些版本,可尝试

#pythondiretion = up | down | left | right#标准指向滑动driver.execute_script("mobile: scroll", [{"direction":direction}])#基于控件的指向滑动driver.execute_script("mobile: scroll", [{"direction":direction, element: element.id}])
  1. 一些第一次能点击,后面再点击就出现错误的特殊情况及解决方法。

答:在点击同一个XPath时,第二次无法点击且报错。可以通过对元素的其他属性来点击该元素,如name或者直接使用坐标进行tap。有的app前面版本支持根据name点击,但是到了后期版本会出现该name明明能被打印出来,但是就是在点击时报错。可以通过XPath点击或者直接tap。

  1. IOS的app在自动化测试的一些bug需要注意。
  1. 一个页面的数据量太大导致app卡死
  2. 根据name点击,会点击成别的元素
  1. Mac OS X问题appium1.4无法在mac10.10以上使用

(1) 在终端打开文件 vi

 /Applications/Appium.app/Contents/Resources/node_modules/appium/lib/doctor/ios.js

(2) 在适当位置添加代码else if (stdout.match('10.9') !== null) {
        this.osVersion = '10.9';
        cb(null, "Mac OS X 10.9 is installed.");
      }  

10.9改为当前mac版本号

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/71894.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python高效试用17---两个字符串组成一个新的字符串和两个字符串组成元组作为key哪个更高效

在 Python 中,使用字符串连接 (str1 str2) 作为 key 和使用元组 ((str1, str2)) 作为 key 的效率差异,主要受以下因素影响: 哈希计算速度: 字符串连接 (str1 str2):会创建一个新的字符串对象,并计算哈希…

深入浅出Java try-with-resources:告别资源泄漏的烦恼

一、为什么需要try-with-resources? 在Java开发中,我们经常需要处理各种资源:文件流、数据库连接、网络套接字等。这些资源都有一个共同特点——必须在使用后正确关闭。传统的资源管理方式存在三大痛点: 代码臃肿:每…

Python+DeepSeek:开启AI编程新次元——从自动化到智能创造的实战指南

文章核心价值 技术热点:结合全球最流行的编程语言与国产顶尖AI模型实用场景:覆盖代码开发/数据分析/办公自动化等高频需求流量密码:揭秘大模型在编程中的创造性应用目录结构 环境搭建:5分钟快速接入DeepSeek场景一:AI辅助代码开发(智能补全+调试)场景二:数据分析超级助…

Linux tcpdump -any抓的包转换成标准的pcap

在 Linux 中使用 tcpdump -any 抓包并转换为标准 pcap 文件时出现额外字段,通常与 链路层协议头部的差异 以及 pcap 文件格式的兼容性 有关。以下是详细原因和解决方案: 一、问题原因分析 -any 选项的局限性 tcpdump -any 会自动猜测链路层协议类型(如 Ethernet、IEEE 802…

【SpringMVC】深入解析使用 Postman 在请求中传递对象类型、数组类型、参数类型的参数方法和后端参数重命名、及非必传参数设置的方法

SpringMVC—请求传参 1. 传递对象 如果参数比较多时,方法声明就需要有很多形参;并且后续每次新增一个参数,也需要修改方法声明. 我们不妨把这些参数封装为一个对象; Spring MVC 也可以自动实现对象参数的赋值,比如 Us…

一个差劲的软件设计

项目概况: 之前自己设计并开发了一个用C#开发的上位机软件,整个软件只有一个Form,一个TabControl,3个TabControlPanel,总共100多个lable、textbox、ListBox等控件都放在这3个TabControlPanel里。 问题: 1.…

Linux练级宝典->进程控制详解(进程替换,fork函数)

目录 进程创建 fork函数 写时拷贝 进程终止 进程退出码 exit函数 _exit函数 return,exit _exit之间的区别和联系 进程等待 进程等待的必要性 获取子进程status 进程等待的方法 wait waipid 多子进程创建理解 非阻塞轮询检测子进程 进程程序替换 替…

RabbitMq--消息可靠性

12.消息可靠性 1.消息丢失的情况 生产者向消息代理传递消息的过程中,消息丢失了消息代理( RabbitMQ )把消息弄丢了消费者把消息弄丢了 那怎么保证消息的可靠性呢,我们可以从消息丢失的情况入手——从生产者、消息代理&#xff0…

Windows中在VSCode/Cursor上通过CMake或launch文件配置CUDA编程环境

前置步骤 安装符合GPU型号的CUDA Toolkit 配置好 nvcc 环境变量 安装 Visual Studio 参考https://blog.csdn.net/Cony_14/article/details/137510909 VSCode 安装插件 Nsight Visual Studio Code Edition 注意:不是vscode-cudacpp。若两个插件同时安装,…

Spark(8)配置Hadoop集群环境-使用脚本命令实现集群文件同步

一.hadoop的运行模式 二.scp命令————基本使用 三.scp命令———拓展使用 四.rsync远程同步 五.xsync脚本集群之间的同步 一.hadoop的运行模式 hadoop一共有如下三种运行方式: 1. 本地运行。数据存储在linux本地,测试偶尔用一下。我们上一节课使用…

聚焦两会:科技与发展并进,赛逸展2025成创新新舞台

在十四届全国人大三次会议和全国政协十四届三次会议期间,代表委员们围绕多个关键议题展开深入讨论,为国家未来发展谋篇布局。其中,技术竞争加剧与经济转型需求成为两会焦点,将在首都北京举办的2025第七届亚洲消费电子技术贸易展&a…

【音视频】ffmpeg命令提取像素格式

1、提取YUV数据 提取yuv数据,并保持分辨率与原视频一致 使用-pix_fmt或-pixel_format指定yuv格式提取数据,并保持原来的分辨率 ffmpeg -i music.mp4 -t "01:00" -pixel_format yuv420p music.yuv提取成功后,可以使用ffplay指定y…

【从零开始学习计算机科学】计算机体系结构(二)指令级并行(ILP)

【从零开始学习计算机科学】【从零开始学习计算机科学】计算机体系结构(二)指令级并行(ILP) ILP流水线(pipeline)流水线调度循环展开和循环流水循环展开。循环展开的具体步骤可以描述为,软件流水(循环流水)。我们可以通过流水线的思想处理循环的执行,即不需要这一次的…

android edittext 防止输入多个小数点或负号

有些英文系统的输入法,或者定制输入法。使用xml限制不了输入多个小数点和多个负号。所以代码来控制。 一、通过XML设置限制 <EditTextandroid:id="@+id/editTextNumber"android:layout_width="wrap_content"android:layout_height="wrap_conten…

2019年蓝桥杯第十届CC++大学B组真题及代码

目录 1A&#xff1a;组队&#xff08;填空5分_手算&#xff09; 2B&#xff1a;年号字符&#xff08;填空5分_进制&#xff09; 3C&#xff1a;数列求值&#xff08;填空10分_枚举&#xff09; 4D&#xff1a;数的分解&#xff08;填空10分&#xff09; 5E&#xff1a;迷宫…

从C#中的MemberwiseClone()浅拷贝说起

MemberwiseClone() 是 C# 中的一个方法&#xff0c;用于创建当前对象的浅拷贝&#xff08;shallow copy&#xff09;。它属于 System.Object 类&#xff0c;因此所有 C# 对象都可以调用该方法。 1. MemberwiseClone() 的含义 浅拷贝&#xff1a;MemberwiseClone() 会创建一个新…

笔记六:单链表链表介绍与模拟实现

在他一生中&#xff0c;从来没有人能够像你们这样&#xff0c;以他的视角看待这个世界。 ---------《寻找天堂》 目录 文章目录 一、什么是链表&#xff1f; 二、为什么要使用链表&#xff1f; 三、 单链表介绍与使用 3.1 单链表 3.1.1 创建单链表节点 3.1.2 单链表的头插、…

尚硅谷爬虫note15n

1. 多条管道 多条管道开启&#xff08;2步&#xff09;&#xff1a; (1)定义管道类 &#xff08;2&#xff09;在settings中开启管道 在pipelines中&#xff1a; import urllib.request # 多条管道开启 #(1)定义管道类 #&#xff08;2&#xff09;在setti…

oracle检查字段为空

在Oracle数据库中&#xff0c;检查字段是否为空通常涉及到使用IS NULL条件。如果你想查询某个表中的字段是否为空&#xff0c;你可以使用SELECT语句结合WHERE子句来实现。这里有一些基本示例来展示如何进行这样的查询。 示例1: 检查单个字段是否为空 假设你有一个表employees…

虚幻基础:动画层接口

文章目录 动画层&#xff1a;动画图表中的函数接口&#xff1a;名字&#xff0c;没有实现。动画层接口&#xff1a;由动画蓝图实现1.动画层可直接调用实现功能2.动画层接口必须安装3.动画层默认使用本身实现4.动画层也可使用其他动画蓝图实现&#xff0c;但必须在角色蓝图中关联…