使用selenium时,使用从系统启动浏览器与通过自动化驱动方式启动浏览器控件ID不一样解决方法
最近遇到一个怪事,通过正常打开浏览器,按照正常的web登录然后点击进入系统流程,将各控件的ID识别成功,然后使用 python3+selenium写好脚本,高高兴兴的用脚本跑时老是提示找不到控件,然后就重新打开浏览器登录重新识别控件,发现识别出来的控件ID又跟之前的不一样,瞬间怀疑是不是自己的眼睛出现视觉疲劳了。
重新关闭所有浏览器重新登录,再次识别该有问题的控件,发现识别出来的控件又跟之前第一次识别出来的一样,但是用脚本跑时还是一如既往的提示找不到该 控件,于是乎就博客园,csdn,stackoverflow,脚本之家各种搜索,发现问题的症状都跟我的不一样,看来这个问题也只能自己搞定,怀着做一个前无古人,后人不踩坑的信仰,于是就把这次问题解决过程记录下来:
1、首先大家要明白,页面的控件值不会一直保持不变的,它会随着操作顺序不同会不太一样,这也就是我第一次和第三次从同一地方进入然后该 控件值不一样
2、页面控件值不受浏览器变化页变化,就是你换个浏览器去查看,该 控件值还是那个控件值,与浏览器无关,但会与启动方式有关
关于第一个记录:
如果一个页面打开后,再没有关闭该页面的情况下,再次重新打开一个新页签打开相同页面,会发现两次的同一控件的控件值不一样,这个我就不举例,大家自己去试
关于第二个记录:
我通过正常方式打开谷歌浏览器,查找到《进入系统》这个控件的ID为 id3
但我通过webdriver驱动方式启动浏览器,查找到该控件的ID为 id2
通过不同方式启动的浏览器,同一控件的ID值确实不一样,按照正常的什么样方式启动测试,就以什么样方式获取的控件ID为准,于是把脚本中的id3改为id2,再次执行脚本,成功了。
通过上面遇到的两个问题,给我的启示就是:
1、使用selenium的webdriver时,写的脚本所使用的控件ID一定要从以webdriver驱动启动浏览器成功再去获取控件值,这样必然保证控件值是正确的(简单理解就是取页面控件值要从webdriver启动的浏览器中去获取)。
2、启动测试时或者取控件值时,一定要先把涉及相关的网页(不管是系统的方式启动浏览器,还是通过webdriver驱动方式启动的浏览器)全部关掉,重新按照写好脚本的顺序依次打开相关页面,然后再按F12键去获取控件值。