XPath即为XML路径语言(XML Path Language),它是一种用来肯定XML文档中某部分位置的语言。通俗一点讲就是经过元素的路径来查找到这个元素的,至关于经过定位一个对象的坐标,来找到这个对象。
Selenium WebDriver支持使用XPath表达式来定位元素。当发现经过ID、name或class属性值没法定位元素时,能够尝试使用XPath的方式。经过XPath能够灵活的应用绝对或相对路径来定位元素。
1. 经过绝对路径定位
XPath表达式表示从html代码的最外层逐层查找,最后定位到按钮节点。若是这样很差理解,能够举个生活中的例子,好比你的户口所在地是XX省XX市XX区XX号。这相对于不熟悉你的人来讲,经过这个地方就能够查找到你。
仍以bing首页为例。借助FireFox浏览器的前端工具Developer Tools工具。从最顶层<html>-><body>->… …-><input>标签,拼接对应元素的绝对路径,如图示。html
find_element_by_xpath方法使用XPath来定位元素。XPath主要用标签名的层级来定位元素的绝对路径,其中最外层html,而后在body内一级一级往下查找想找的元素。若是某个层级由多个相同的标签,就按先后顺序肯定是第几个,例如input[1]表示当前层级的第1个input标签。
借助FireFox浏览器的前端工具Developer Tools工具,能够拼接出输入框与搜索按钮两个元素的绝对路径。
搜索框:/html/body/table/tbody/tr/td/div/div[2]/div[3]/form/div/input[1]
搜索按钮:/html/body/table/tbody/tr/td/div/div[2]/div[3]/form/div/div[1]/input
要操做Bing搜索页。
经过XPath找到搜索框与搜索按钮元素;
经过键盘输入检索的关键字;
用鼠标单击搜索按钮;
提交搜索请求。
Selenium的完整代码以下:前端
from selenium import webdriver from time import sleep driver = webdriver.Firefox() driver.get("http://cn.bing.com/") driver.find_element_by_xpath("/html/body/table/tbody/tr/td/div/div[2]/div[3]/form/div/input[1]").send_keys("bella") #搜素框 driver.find_element_by_xpath("/html/body/table/tbody/tr/td/div/div[2]/div[3]/form/div/div[1]/input").click() #搜索按钮 sleep(3) driver.quit()
借助Chrome浏览器的开发者工具可以快速的得到对应元素Xpath的绝对路径。
在Chrome浏览器中打开bing。在Chrome菜单中选择 【更多工具】 >【 开发者工具】(经过F12能够调用)。
经过选择器,选中某元素(如搜索框元素),右键单击选择copy,而后单击copy full XPath。就将该元素Xpath(搜索框元素)的绝对路径复制下来,而后直接粘贴到代码中使用便可,(/html/body/table/tbody/tr/td/div/div[2]/div[3]/form/div/input[1])如图所示。web
注:
经过XPath定位元素过程当中,不要一味迷信使用FireFox的开发者工具,记得Seleium也是支持Chrome浏览器的。要很好的借助FireFox浏览器与Chrome浏览器二者的开发者工具,综合应用两款浏览器的前端开发者工具,来得到某元素的XPath。
为了不人工形成的错误,尽可能不要本身拼写绝对路径,避免拼写路径错误的发生。api
2. 经过元素属性定位
XPath定位元素除了使用绝对路径外,也可使用元素的某个属性值来定位。一样以bing首页为例。
XPath经过元素的某个属性值来定位元素,就无需手动拼写了,能够借助FireFox浏览器与Chrome浏览器二者的开发者工具完成。
借助FireFox浏览器开发者工具得到搜索框元素XPath的值。如图所示,FireFox Developer Tools中选中搜素框元素,而后右键单击该元素的代码区域,【复制】->【XPath】,就获得该元素的某个属性值的Xpath值(//*[@id="sb_form_q"]),如图所示。浏览器
同理,得到搜索按钮元素某个属性值的Xpath(//[@id="sb_form_go"])。这里//表示当前页面某个目录下,表示匹配全部标签,[@id="sb_form_go"]与[@id="sb_form_q"]表示对应元素(搜索框元素与搜索按钮元素)的id属性值是"sb_form_go"与"sb_form_q"。
XPath经过元素的某个属性定位元素的完整代码以下:ide
from selenium import webdriver from time import sleep driver = webdriver.Firefox() driver.get("http://cn.bing.com/") #简化的xpath路径 driver.find_element_by_xpath("//*[@id='sb_form_q']").send_keys("bella") driver.find_element_by_xpath("//*[@id='sb_form_go']").click() sleep(3) driver.quit()
经过Chrome浏览的开发者工具,得到元素XPath的某个属性如图所示。
XPath经过元素的某个属性定位不单单局限于ID,能够经过人知道属性值实现,如name、class等。
搜素框元素的html代码。
<input class="b_searchbox" id="sb_form_q" name="q" title="输入搜索词" type="search" value="" maxlength="100" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" aria-controls="sw_as" aria-autocomplete="both" aria-owns="sw_as">
搜索按钮元素的html代码。
<input type="submit" class="b_searchboxSubmit" id="sb_form_go" tabindex="0" name="go">
此时就须要手动书写经过两个元素的name、class属性实现XPath定位。下面分别经过name与class属性值来定位。
经过元素的name属性定位元素的完整代码以下:工具
from selenium import webdriver from time import sleep driver = webdriver.Firefox() driver.get("http://cn.bing.com/") # 利用元素属性定位--name driver.find_element_by_xpath("//input[@name='q']").send_keys("bella") driver.find_element_by_xpath("//input[@name='go']").click() sleep(3) driver.quit()
这里//表示当前页面某个目录下,input表示匹配input标签的元素,[@name='q']与[@name='go']表示对应元素(搜索框元素与搜索按钮元素)的name属性值是"q"与"go"。
经过元素的class属性定位元素的完整代码以下:测试
from selenium import webdriver from time import sleep driver = webdriver.Firefox() driver.get("http://cn.bing.com/") # 利用元素属性定位--class driver.find_element_by_xpath("//input[@class='b_searchbox']").send_keys("bella") driver.find_element_by_xpath("//input[@class='b_searchboxSubmit']").click() sleep(3) driver.quit()
若是你觉的文章读的不过瘾,能够查看详细的视频教程。
【2021】UI自动化测试:Selenium3自动化测试
https://edu.51cto.com/course/26488.htmlui
【测试全系列视频课程】请点击我哦.....
(https://edu.51cto.com/lecturer/968349.html)code
图书京东、当当有售
京东:https://item.jd.com/12784287.html
当当:http://product.dangdang.com/29177828.html