4、Selenium + Python 实现 UI 自动化测试-定位元素吗?

前一篇说的元素定位,只是告诉你有这个用法,实际项目中,我们面临的情况要复杂的多,大多数自动化项目都死在了元素定位上,以至于有人曾说:“想要完成自动化项目,测试人员就要有修改代码的权限,给需要用到的元素加上id。。。。”,现实中允许测试修改代码的事情很难发生,而且你不应该依赖id去定位,正确的做法是提升自己定位元素的本领。或者说,一个元素有id或者有唯一的name,你就能定位到了吗?

我觉得有必要让大家意识到问题的严重性,以确保你不会认为知道了18种元素定位方法,就能定位到所有元素。


一、模拟登录163邮箱

4、Selenium + Python 实现 UI 自动化测试-定位元素吗?


来看看,账号输入框,有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()

运行,报错

4、Selenium + Python 实现 UI 自动化测试-定位元素吗?

看一看,报错信息,跟我们项目相关,貌似就是第7行,定位元素那里。我可是用的id,怎么可能错误,回头再看看,id是多少,诶呦,我的天,怎么搞的,id变了,刚才明明是复制过来的,怎么可能复制错。。。

4、Selenium + Python 实现 UI 自动化测试-定位元素吗?

刷新一下,再看看,又变了。。。——好,这里是动态ID的概念,暂时不解释。

换个方法定位吧,有name,不错,find_element_by_name(email),仍然报错

driver.find_element_by_name('email').send_keys('xxx')


运行结果截图

4、Selenium + Python 实现 UI 自动化测试-定位元素吗?

no such element,说没有这个元素,到底是什么鬼?


好了,本篇文章,只是抛出来两个问题:

(1)动态id,怎么定位?

(2)为什么有的元素明明存在,运行却报no such element

没有给出答案,别着急,后面我们一点点来分析。