Appium 使用隐式等待,无法执行代码怎么办?

简介

  添加等待是为了确保自动化脚本在执行过程中与应用程序之间的同步和稳定性。

  应用程序的响应时间是不确定的,可能存在网络延迟、加载时间、动画效果等因素。如果在执行自动化脚本时没有适当的等待机制,脚本可能会在应用程序还未完成相应操作或加载完成之前继续执行下一步,导致测试失败或产生不稳定的结果。

  通过添加适当的等待操作,可以使脚本在关键操作后等待一段时间,以确保应用程序完成相关任务或操作。这可以包括显式等待(例如等待特定元素出现、消失或可点击),或隐式等待(在整个脚本执行过程中设置一个全局的等待时间)。

  等待操作有助于提高脚本的稳定性,减少因应用程序响应不一致而导致的测试失败。它还能够模拟用户在与应用程序交互时的真实等待时间,提供更真实的测试场景。

  因此,在编写自动化脚本时,考虑添加适当的等待操作是一个重要的实践,可以提高脚本的可靠性和稳定性,并确保脚本与应用程序之间的同步。

  强制等待

  ·解决方案:在报错的元素操作之前添加等待。

  · 原理:线程休眠一定时间。

  · time.sleep(3)

import timefrom appium import webdriverfrom appium.options.android import UiAutomator2Optionsfrom appium.webdriver.common.appiumby import AppiumByfrom selenium.webdriver.support import expected_conditionsfrom selenium.webdriver.support.wait import WebDriverWaitclass TestWait:def setup_class(self):'''        完成 capability 设置        初始化 driver        :return:        '''# 设置 cpabilitycaps = {# 设置 app 安装的平台(Android,iOS)"platformName": "Android",# 设置 appium 驱动"appium:automationName": "uiautomator2",# 设置设备名称"appium:deviceName": "emulator-5554",# 设置被测 app 的包名"appium:appPackage": "io.appium.android.apis",# 设置被测 app 启动页面的 Activity"appium:appActivity": ".ApiDemos",# 不清空缓存信息"appium:noReset": True,# 首次启动的时候,不停止app"appium:dontStopAppOnReset": True,# 跳过安装,权限设置等操作"appium:skipDeviceInitialization": True,}# 初始化 driverself.driver = webdriver.Remote("http://127.0.0.1:4723",options=UiAutomator2Options().load_capabilities(caps))def teardown_class(self):'''        关闭 driver        :return:        '''self.driver.quit()def test_wait(self):'''        点击 OS 按钮后等待 3 秒        输入框输入内容后等待 2 秒        点击返回按钮后等待 2 秒        :return:        '''# 测试步骤# 找到 OS 元素el5 = self.driver.find_element(by=AppiumBy.ACCESSIBILITY_ID, value="OS")# 点击 OS 元素el5.click()# 等待 3 秒time.sleep(3)# 找到 Morse Code 元素el6 = self.driver.find_element(AppiumBy.ACCESSIBILITY_ID, "Morse Code")el6.click()# 找到输入框元素el7 = self.driver.find_element(AppiumBy.ID, "io.appium.android.apis:id/text")# 在输入框中输入内容el7.send_keys("ceshiren.com")# 等待 2 秒time.sleep(2)# 点击返回按钮self.driver.back()# 等待 2 秒time.sleep(2)# 点击返回按钮self.driver.back()# 断言:判断首页中第一个元素的文本内容是 Access'ibilityresult = self.driver.find_element(AppiumBy.XPATH,"//*[@resource-id='android:id/text1'][1]")print(result.text)assert result.text == "Access'ibility"

 

隐式等待

  ·问题:难以确定元素加载的具体等待时间。

  · 解决方案:针对于寻找元素的这个动作,使用隐式等待添加配置。

  · 演练环境:雪球 app。

  · 原理:隐式等待是一种全局的等待方式,设置一个等待时间,轮询查找(默认 0.5 秒)元素是否出现,如果没出现就抛出异常。

#设置一个等待时间,轮询查找(默认0.5秒)元素是否出现,如果没出现就抛出异常driver.implicitly_wait(3)

 

隐式等待无法解决的问题

  ·元素可以找到,使用点击等操作,出现报错。

  · 原因:

  o页面元素加载是异步加载过程,通常 xml 会先加载完成,相应的元素属性后加载。

  o元素存在与否是由 xml 决定,元素的交互是由属性决定。

  o隐式等待只关注元素能不能找到,不关注元素能否点击或者进行其他的交互。

  · 解决方案:使用显式等待。

  显式等待基本使用

  · 示例:WebDriverWait(driver实例, 最长等待时间, 轮询时间).until(结束条件)。

  · 原理:在最长等待时间内,轮询,是否满足结束条件。

  · 注意:在初级时期,先关注使用。

# 显示等待 Morse Code 元素可点击WebDriverWait(self.driver, 10).until(expected_conditions.element_to_be_clickable((AppiumBy.ACCESSIBILITY_ID, "Morse Code")))# 找到 Morse Code 元素el6 = self.driver.find_element(AppiumBy.ACCESSIBILITY_ID, "Morse Code")el6.click()

 

总结

  Appium 提供了三种等待方式,确保测试脚本在执行时与应用程序状态同步。这些等待分为强制等待、隐式等待和显式等待三种。用户可以根据不同的需求结合使用这些等待方式,以提高测试脚本的稳定性和可靠性。

感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

 

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!有需要的小伙伴可以点击下方小卡片领取   

 

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

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

相关文章

转让5000万无区域能源公司要求和流程

国家局的公司,也就是无地域无区域性的公司名称。这样的公司是还可以继续注册的,但是想要拥有国家局无区域的名称就不是那么容易的了。总局的企业要求高,也是实力的体现。对字号有保护。所以有很多人都对无地域的名称一直情有独钟。现有一家名…

【logback-spring配置不生效,开发环境和生产环境配置不同输出级别】

<?xml version"1.0" encoding"UTF-8"?> <configuration debug"false"><!-- ****************************************************************************************** --><!-- ****************************** 本地…

Linux文件夹下所有文件打包

在Linux系统中&#xff0c;可以使用tar命令来打包一个文件夹下的所有文件。以下是一些基本的tar命令用法&#xff1a; 打包文件夹&#xff1a;将指定文件夹及其内容打包成一个.tar文件。 tar -cvf archive_name.tar /path/to/directory-c 表示创建一个新的归档文件。-v 表示在处…

git命令--版本恢复

概述 有两类情形需要做版本恢复。一是整个仓库回退到某一个版本&#xff0c;二是单个文件回退到某一个版本。两者的操作方式是不同的。 操作 整个仓库回退到某一个版本 查看并选取需要回退的commit id git log | less 回退到其中一个版本 git reset --hard [commit_id] 推到…

智能视频监控平台LntonCVS视频监控汇聚平台系统详细介绍

视频监控综合管理平台是专为大中型用户设计的安防管理软件&#xff0c;旨在实现跨区域网络化视频监控的集中管理。该平台集成了信息资源管理、设备管理、用户管理、网络管理和安全管理等多项功能&#xff0c;能够集中管理监控中心的所有视频图像&#xff0c;支持多品牌设备联网…

AI基准测评(下):视频生成、代码能力、逻辑推理,AI是否已经超越人类?

本文作者&#xff1a;王加龙&#xff0c;阿里云高级算法专家 文章推荐 AI实测&#xff5c;基于图像、语言与声音&#xff0c;人工智能是否已经超越了人类&#xff1f; 知乎AI产品“直答”正式上线&#xff01;文心一言4.0 Turbo来袭&#xff0c;可为农民提供专业指导&#x…

MySQL——索引介绍及索引的分类

官方介绍索引是帮助MySQL高效获取数据的数据结构。 提取句子主干&#xff0c;就可以得到索引的本质&#xff1a;索引是数据结构。 索引的分类 在一个表中&#xff0c;主键索引只能有一个&#xff0c;唯一索引可以有多个 主键索引&#xff08;PRIMARY KEY&#xff09;&#xf…

Fork/Join框架

什么是 Fork/Join Fork/Join 框架是 Java7 提供了的一个用于并行执行任务的框架&#xff0c; 是一个把大任务分割成若干个小任务&#xff0c;最终汇总每个小任务结果后得到大任务结果的框架。 分治 我们再通过 Fork 和 Join 这两个单词来理解下 Fork/Join 框架&#xff0c;F…

数据库设计规范(DOC文件)

1 编写目的 2 数据库策略 2.1 数据库对象长度策略 2.2 数据完整性策略 2.3 规范化设计与性能之间的权衡策略 2.4 字段类型的定义与使用策略 3 命名规范 3.1 数据库命名规则 3.2 数据库对象命名的一般原则 3.3 表空间(Tablespace)命名规则 3.4 表(Table)命名规则 3.5…

人大金仓 PostgreSQL 触发器同步记录数据到另一张表

创建触发器 CREATE TRIGGER sync_tz_ly_event_trigger AFTER INSERT OR UPDATE OR DELETE ON tz_ly_event FOR EACH ROWEXECUTE FUNCTION sync_tz_ly_event_records ( );创建触发函数 CREATE OR REPLACE FUNCTION "sync_tz_ly_event_records"()RETURNS "pg_c…

Java 虚拟机 一

运行时数据区 我们先看线程隔离的数据区 程序计数器 程序计数器&#xff08; Program Counter Register&#xff09; 是一块较小的内存空间&#xff0c; 它可以看作是当前线程所执行的字节码的行号指示器。 字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执…

提升用户体验之requestAnimationFrame实现前端动画

1)requestAnimationFrame是什么? 1.MDN官方解释 2.解析这段话&#xff1a; 1、那么浏览器重绘是指什么呢&#xff1f; ——大多数电脑的显示器刷新频率是60Hz&#xff0c;1000ms/6016.66666667ms的时间刷新一次 2、重绘之前调用指定的回调函数更新动画&#xff1f; ——requ…

六西格玛绿带培训ROI:你的投资究竟值不值?

近年来&#xff0c;企业对于员工培训的投入日益增加&#xff0c;六西格玛绿带培训更是作为提升企业运营效率和质量管理的利器&#xff0c;更是备受关注。然而&#xff0c;面对高昂的培训成本&#xff0c;企业如何评估六西格玛绿带培训的投资回报率&#xff08;ROI&#xff09;呢…

安装Intel Realsense D435i驱动与ROS包报错

1.下载安装realsense SDK 1.1 安装依赖 sudo apt install libudev-dev pkg-config libgtk-3-dev sudo apt install libusb-1.0-0-dev pkg-config sudo apt install libglfw3-dev sudo apt install libssl-dev1.2 权限 cd librealsense/ sudo cp config/99-realsense-libusb.…

一万年太久,只争朝夕 | Foundation model的进展仍不够快

编者按&#xff1a;如今根基模型&#xff08;Foundation Models&#xff09;的应用和相关创新正在快速涌现&#xff0c;但仍有很大的提升空间&#xff0c;目前还无法充分发挥根基模型的潜能、将其高效快速地应用于企业级AI应用中。 根基模型的加速应用和落地&#xff0c;带动了…

64、基于去噪卷积神经网络的彩色图像去噪(matlab)

1、基于去噪卷积神经网络的彩色图像去噪的原理及流程 基于去噪卷积神经网络的彩色图像去噪是一种基于深度学习的图像处理技术&#xff0c;可以有效地去除图像中的噪声&#xff0c;提高图像的质量。下面是在Matlab中实现基于去噪卷积神经网络的彩色图像去噪的原理及流程&#x…

移动端响应式布局开发的四大方案

移动端响应式布局开发的四大方案 media媒体查询remflexvh/vw media媒体查询 媒体查询通常会结合百分比实现自适应&#xff0c;它经常应用于pc端与移动端是一套项目代码的情况&#xff0c;依据媒体查询写多套不同的样式 rem pc端和移动端是两套代码的&#xff0c;通常pc端不做…

ChatGPT如何应用在谷歌seo?

ChatGPT在提升博客和创作效率方面非常有用。它可以帮助你快速生成吸引人的标题&#xff0c;确保内容第一眼就能抓住读者的注意力。不仅如此&#xff0c;ChatGPT还能根据你的主题生成详细的文章提纲&#xff0c;让你在写作时思路更加清晰。关键词优化也是它的强项&#xff0c;可…

300KG载重履带式无人车技术详解

一、动力系统 300KG载重履带式无人车采用了高效且稳定的动力系统&#xff0c;通常由电池组或燃油发动机作为动力源。电池组提供了较长的续航时间和较低的运行噪音&#xff0c;适用于需要静音作业的场合。而燃油发动机则能提供更高的功率和续航能力&#xff0c;适用于需要长时间…

上海市计算机学会竞赛平台2023年3月月赛丙组选取子段

题目描述 给定一个长度为&#x1d45b;n的序列 &#x1d44e;1,&#x1d44e;2,...,&#x1d44e;&#x1d45b;a1​,a2​,...,an​ &#xff0c;请问多少种方案&#xff0c;能够从中选取一个长度恰好为 &#x1d45a;m 的子段&#xff0c;且子段内所有数字的最大值不超过&…