前一篇说的元素定位,只是告诉你有这个用法,实际项目中,我们面临的情况要复杂的多,大多数自动化项目都死在了元素定位上,以至于有人曾说:“想要完成自动化项目,测试人员就要有修改代码的权限,给需要用到的元素加上id。。。。”,现实中允许测试修改代码的事情很难发生,而且你不应该依赖id去定位,正确的做法是提升自己定位元素的本领。或者说,一个元素有id或者有唯一的name,你就能定位到了吗?
我觉得有必要让大家意识到问题的严重性,以确保你不会认为知道了18种元素定位方法,就能定位到所有元素。
一、模拟登录163邮箱
来看看,账号输入框,有id,请确保你没偷偷笑我,出了这么简单的一个题目
from selenium import webdriver from time import sleep driver = webdriver.Chrome() driver.get("http://mail.163.com/") driver.find_element_by_id('auto-id-1506309464597').send_keys('xxx') sleep(3) driver.quit()
运行,报错
看一看,报错信息,跟我们项目相关,貌似就是第7行,定位元素那里。我可是用的id,怎么可能错误,回头再看看,id是多少,诶呦,我的天,怎么搞的,id变了,刚才明明是复制过来的,怎么可能复制错。。。
刷新一下,再看看,又变了。。。——好,这里是动态ID的概念,暂时不解释。
换个方法定位吧,有name,不错,find_element_by_name(email),仍然报错
driver.find_element_by_name('email').send_keys('xxx')
运行结果截图
no such element,说没有这个元素,到底是什么鬼?
好了,本篇文章,只是抛出来两个问题:
(1)动态id,怎么定位?
(2)为什么有的元素明明存在,运行却报no such element
没有给出答案,别着急,后面我们一点点来分析。