概述
最近在学习用selenium2基于python3做自动化测试,写了一个小脚本,完成360云盘的登录功能;
通过页面元素的ID定位账号输入框和密码输入框;
# coding = utf-8
from selenium import webdriver
driver = webdriver.Firefox()
driver.get("http://c56.yunpan.360.cn/")
driver.find_element_by_id("quc_account_55212773").clear()
driver.find_element_by_id("quc_account_55212773").send_keys("xxxx") #账号名
driver.find_element_by_id("quc_password_55212774").clear()
driver.find_element_by_id("quc_password_55212774").send_keys("xxxx") #密码
driver.find_element_by_xpath('/html/body/div[2]/div/div[3]/div[1]/div/div[2]/form/p[5]/input').click()
执行后报错selenium.common.exceptions.NoSuchElementException: Message: Unable to locate element;
无法定位到元素,经过查找发现,每次打开360云盘网页,账号输入框ID和密码输入框ID都是不同的,因此无法通过ID定位;
修改脚本,通过xpath定位:
# coding = utf-8
from selenium import webdriver
driver = webdriver.Firefox()
driver.get("http://c56.yunpan.360.cn/")
driver.find_element_by_xpath("/html/body/div[2]/div/div[3]/div[1]/div/div[2]/form/p[1]/span/input").clear()
driver.find_element_by_xpath("/html/body/div[2]/div/div[3]/div[1]/div/div[2]/form/p[1]/span/input").send_keys("XXXX")
driver.find_element_by_xpath("/html/body/div[2]/div/div[3]/div[1]/div/div[2]/form/p[2]/span/input").clear()
driver.find_element_by_xpath("/html/body/div[2]/div/div[3]/div[1]/div/div[2]/form/p[2]/span/input").send_keys("XXX")
driver.find_element_by_xpath('/html/body/div[2]/div/div[3]/div[1]/div/div[2]/form/p[5]/input').click()
再次执行脚本,可以进行登录,问题解决。
通过上面的例子,我们可以看到xpath 的定位方式非常灵活和强大的,但是它的缺陷也非常明显:
1、性能差,定位元素的性能要比其它大多数方式差;
2、不够健壮,xpath会随着页面元素布局的改变而改变;
3. 兼容性不好,在不同的浏览器下对xpath 的实现是不一样的。
另外,CSS 定位语法比xpath 更为简洁,定位方式更多灵活多样;不过对CSS 理解起来要比xpath 较难;但不管是从性能还是定位更复杂的元素上,CSS 优于xpath,笔者更推荐使用CSS定位页面元素。
自动化测试的元素定位一直是困扰自动化测试新手的一个障碍,因为我们在自动化实施过程中会碰到各式各样的对象元素。虽然xpath 和CSS 可以定位到复杂且比较难定位的元素,但相比较用id 和name 来说增加了维护成本和学习成本,相比较来说id/name 的定位方式更直观和可维护,有新的成员加入的自动化时也增加了人员的学习成本。所以,测试人员在实施自动化测试时一定要做好沟通,规范前端开发人员对元素添加id/name 属性,或者自己有修改HTML 代码的权限。
最后
以上就是烂漫春天为你收集整理的通过ID定位,ID变化导致selenium无法定位到元素的全部内容,希望文章能够帮你解决通过ID定位,ID变化导致selenium无法定位到元素所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复