自动化测试经典面试题-定位不到元素

在这里插入图片描述


一、元素定位

1、Selenium/Appium定位方法有几种?分别是?

selenium:

xpath、css、id、name、class_name、tag_name、link_text、partail_link_text

Appium:

xpath、css、id(通过身份标识 id 查找元素,对应的是resource-id)、accessibility_id(通过 accessibility_id查找元素,对应的是content-desc)

2、如何通过子元素定位父元素

获取当前节点的父节点://input[@name="wd"]/..
获取当前节点的爷爷节点://input[@name="wd"]/../..

二、元素定位不到

1、定位不到元素是什么原因导致的?

原因:元素定位表达式写错了(可能是单词、格式写错了)
解决方案:检查单词、元素定位表达式。

原因:元素定位写错了,报NoSushElementException(在elements中搜索对应的元素,发现没有搜索到,则证明定位写错了)
解决方案:检查写一个正确的定位

原因:由于页面加载很快,元素还未加载出来就执行了find_element操作
debug思路:1、添加一个强制等待,确认页面加载完成之后,再执行find操作,如果此时用例通过,代表元素定位没有问题。否则是别的原因。
解决方法:使用隐式等待和显性等待

原因:因为id是动态的,一直是变化的,所以此时使用ID定位就会非常不稳定
解决方案:检查每次使用的这个元素的id是否一致;使用其他的定位方式,xpath或者css的相对定位

原因:排除以上情况后,还有可能性为iframe
debug思路:1、查看浏览器的elements页面中输入iframe,确认页面中是否含有iframe,
2、然后鼠标悬浮到iframe元素上,检查要定位元素是否在iframe页面中,如果是的话,那么定位之前需要切换iframe的操作。driver.switch_to.frame()

原因:打开了新窗口,并且定位的是新窗口的元素
debug思路:检查是否打开了新的页面
解决方案:如果要定位新窗口的元素,那么需要先切换到对应的页面再去定位
windows=driver.window_handles
driver.switch_to.window(windows[-1])

2、如何定位动态元素

检查每次使用的这个元素的id是否一致,确定是否是否是动态元素;
如果是动态元素,使用其他的定位方式,xpath或者css的相对定位

3、有的元素就加载页面上,但是你却定位不到,怎么解决

同1

三、元素操作

1、一个元素明明定位到了,点击无效(也没报错),如何解决?

原因:异步加载js导致点击事件无效
解决方案:自己封装一个显性等待,循环点击该按钮,直到生效为止<显性等待>

2、selenium 中隐藏元素如何定位,操作?

原因:隐藏元素可以直接定位,但是无法直接点击或者交互
解决方案:使用js执行交互操作

driver.excute_script("document.querySelector(‘#kw’).value=‘python’ "):修改文本框文本信息
driver.excute_script(“document.querySelector(‘#kw’).value”):获取文本框文本信息
driver.excute_script(“document.querySelector(‘#su’).click()”):点击操作
driver.excute_script(“document.querySelector(‘#train_date’).value”):获取时间控件的信息,并返回出来

3、如果产品总是出现弹窗,导致用例无法执行,应该如何解决?(未完)

在做app自动化测试过程中不定时弹框(广告弹窗,升级提示框,新消息提示框等等)
弹框不是 BUG(UI 界面提示,警告的作用)
在这里插入图片描述
解决方法:通过添加黑名单,解决异常处理;采用装饰器
对原有函数的功能增强
不改变原有函数的逻辑
使代码更简洁、易维护
详细文章介绍:https://blog.csdn.net/YZL40514131/article/details/130543238?spm=1001.2014.3001.5501

4、如何获取app中的toast消息提示?

原因:toast闪过太快,不好定位
解决方案:直接通过xpath定位结合隐式等待获取《特殊控件toast识别》
appium使用uiautomator底层的机制来分析抓取toast,并且把toast放到控件树里面,但本身并不属于控件。

方式一:
self.driver.find_element(AppiumBy.XPATH,"//*[contains(@text,'popup menu')]")
方式二:
self.driver.find_element(AppiumBy.XPATH,"//android.widget.Toast[@class='android.widget.Toast']")

四、元素是否在页面存在

1、如何判断一个页面上元素是否存在?

解决方案:通过查看当前页面dom,搜索该元素是否存在。如果是脚本自动化运行过程中,应该通过打印page_source,即可了解到该元素在运行过程中是否存在

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

敲代码敲到头发茂密

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值