ui自动化之selenium操作(三)xpath定位

xpath 的定位方法,非常强大.使用这种方法几乎可以定位到页面上的任意元素。

1. 什么是xpath?

xpath 是XML Path的简称, 由于HTML文档本身就是一个标准的XML页面,所以我们可以使用Xpath 的用法来定位页面元素。

2. xpath的缺点

xpath 这种定位方式,webdriver会将整个页面的所有元素进行扫描以定位我们所需要的元素,这是个非常费时的操作,如果脚本中大量使用xpath做元素定位的话,脚本的执行速度可能会稍慢;

3. 绝对路径定位

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <div id="div1">
        <input name="div1input"/>
        <a href="http://www.sogou.com">搜狗搜索</a>
        <img alt="div1-img1" src="http://www.sogou.com/images/logo/new/sogou.png" href="http://www.sogou.com">搜狗图片</img>
        <input type="button" value="查询"/>
    </div>
    <br />
    <div name="div2">
        <input name="div2iniput"/>
        <a href="http://www.baidu.com">百度搜索</a>
        <img alt="div2-img2" src="http://www.baidu.com/img/bdlogo.png" href="http:/www.baidu.com">百度图片</img>
    </div>
</body>
</html>
test.html

以上面的test.html举例,想要定位到查询按钮,则用绝对路径定位就是:

browser.find_element_by_xpath("/html/body/div/input[@value='查询']")

这样定位的缺点就是:

 一旦页面结构发生改变,改路径也随之失效,必须重新。 所以不推荐使用绝对路径的写法;

4. 相对路径定位

相对路径定位:

browser.find_element_by_xpath("//input[@value='查询']")

5. 绝对路径和相对路径的区别

绝对路径  以 "/"  开头, 让xpath 从文档的根节点开始解析;

相对路径  以"//" 开头, 让xpath 从文档的任何元素节点开始解析;

6. 使用索引号定位

browser.find_element_by_xpath("//input[2]")

7. 利用元素属性定位

browser.find_element_by_xpath("//input[@id='wd']")

8. 用by定位元素

有时需要使用定位方法,在具体通过哪种定位方式(id 或 name)根据实际场景而定位,By 就可以设置定位策略。

browser.find_element(By.ID,'kw')
browser.find_element(By.NAME,"wd")
browser.find_element(By.CLASS_NAME,"s_ipt")
browser.find_element(By.TAG_NAME,"input")
browser.find_element(By.LINK_TEXT,u"新闻")
browser.find_element(By.PARTIAL_LINK_TEXT,u"新")
browser.find_element(By.XPATH,"//*[@class='bg s_btn']")
browser.find_element(By.CSS_SELECTOR,"span.bg s_btn_wr>input#su")

find_element()方法只用于定位元素。它需要两个参数,第一个参数是定位方式,这个由 By 提供;第二个参数是定位的值。在使用 By 时需要将 By 类导入。

from selenium.webdriver.common.by import By

ps:如果在使用过程中发现pycharm没有提示,那么说明你导入了假的selenium,需要进入到python的安装目录,python.exe的同级目录下手动删除selenium文件夹;

9. 使用浏览器调试工具直接获取xpath语句

posted @ 2017-03-16 15:32  Co丶cc  阅读(355)  评论(0编辑  收藏  举报