元素定位常见的面试相关问题
- 一、元素定位
- 1、Selenium/Appium定位方法有几种?分别是?
- 2、如何通过子元素定位父元素
- 二、元素定位不到
- 1、定位不到元素是什么原因导致的?
- 2、如何定位动态元素
- 3、有的元素就加载页面上,但是你却定位不到,怎么解决
- 三、元素操作
- 1、一个元素明明定位到了,点击无效(也没报错),如何解决?
- 2、selenium 中隐藏元素如何定位,操作?
- 3、如果产品总是出现弹窗,导致用例无法执行,应该如何解决?(未完)
- 4、如何获取app中的toast消息提示?
- 四、元素是否在页面存在
- 1、如何判断一个页面上元素是否存在?
一、元素定位
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,即可了解到该元素在运行过程中是否存在