android jsonarray数组转jsonobject异常_Appium元素检测异常捕捉与元素定位

本文介绍了Appium自动化测试中遇到的问题及其解决方案,如因重复使用脚本导致的`noReset`设置错误,以及如何通过修改desired_caps进行修复。同时,详细阐述了如何捕获并处理`NoSuchElementException`异常,提供了通过name、classname、相对定位和绝对定位等方式进行元素定位的方法,并给出了使用示例。此外,还提及了在元素属性相同情况下,利用list定位的策略。
292588377822ed7b2a10e362fb1b966e.gif

有头发且有趣的码农万里挑一~ 

74

有料叔 | 一位有故事的程序猿

5bf2afee967ccfe495f9dd4d1565f704.gif

bfc0d63b6079e084bda4cbb28f1abb86.pngAppium元素检测异常捕捉

由于重复使用脚本导致apk没有重置导致脚本运行错误Norest的默认值是false,不会重置应用;导致部分需要引导页或升级引导的脚本再次运行时出现报错;

解决方法如下:

在脚本内增加:desired_caps[‘noReset’]=’True’

NoSuchElementException捕获异常

注意:不能直接使用if函数,会出现未检测到元素的错误

  1. NoSuchElementException的使用步骤:

导入使用NoSuchElementException:

               from selenium.common.exceptions import NoSuchElementException

定义函数

ddbacdaafaf6bd1c0fb92195c619455f.png

调用函数

直接在脚本内输入函数的名称,即可调用,例如:check_imagebutton()

bfc0d63b6079e084bda4cbb28f1abb86.pngAppium元素定位

元素通过name元素定位

Appium的name元素定位对应的是Android上的text字段,语法:

driver.find_element_by_name(‘安检测速’).click()

849d5d98da1be54a2dcad91dce58932c.png

缺点:部分文本,虽然会显示出来,但是空间上该text字段获取失败

元素通过classname定位

Appium的classname元素定位对应的是Android上的class字段,语法:

driver.find_element_by_class_name(‘android.widget.TextView’).click()

af174626d1aebe1d796e787c30d4ebc5.png

缺点:页面可能存在多个class一样的元素,会导致定位错误

元素的相对定位

说明:相对地址定位,指先指定一个位置范围,再相对此范围内去查找需要的元素

脚本及语法如下:

root_element=driver.find_element_by_id('com.mydream.wifi:id/rlWifiAvailable')  
root_element.find_element_by_id('com.mydream.wifi:id/tvTitle').click()

4f2ac7fe9f0c4ac1e5ee88c7b2537ac1.png

元素的绝对定位xpath

常用的匹配符号

符号

说明

/

从根节点取,逐级获取

//

从匹配选择的当前界面选择,该方式不考虑节点位置

*

匹配任何元素节点

@

选取属性

.

选取当前节点

..

选取当前节点的父节点

1cf8229cac0061e2e8c008e6cee73f44.png

示例:

b39c65b75f53c9012421aa363b816445.png

脚本:

#!_*_ coding:UTF-8 _*_

from find_element.capability import driver

#根据相对路径来定位

# driver.find_element_by_xpath('/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.RelativeLayout/android.view.View[2]/android.support.v7.widget.RecyclerView/android.widget.FrameLayout/android.widget.RelativeLayout/android.widget.RelativeLayout/android.widget.TextView[3]').click()

#根据绝对路径来定位

# driver.find_element_by_xpath('//android.widget.RelativeLayout/android.widget.TextView[3]').click()

# 根据绝对路径//>*匹配任何元素节点>@根据元素属性三种组合来定位

driver.find_element_by_xpath('//*[@text="安检测速"]').click()

通过list定位

背景:

部分元素得属性值一样,倒是定位不准确,此时可以通过list数组得方式,通过数组下标来定位到指定得元素

38c44e3ce983401177507385d3f4221e.png

语法:find_elements_by_.....

脚本:#!_*_ coding:UTF-8 _*_from find_element.capability import driver#根据id或者class定位时,会出现同一个页面上部分元素得id或者class值一样,此时可以通过list得方式定位textview=driver.find_elements_by_class_name('android.widget.TextView')   #查询到页面上classandroid.widget.TextView得所有元素textview[3].click() #根据元素得数据下标来定位到对应得元素
03ab748d43b7df98ad6b2e1c5dbd1f43.png
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值