zoukankan      html  css  js  c++  java
  • 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语句

  • 相关阅读:
    Fiddler localhost问题
    Ajax 'sys'未定义
    将字符串中的危险字符替换掉函数 ReplaceStr()
    如何重新注册asp.net 2.0
    Asp.net CS页面调用Javascript进行Alert输出
    Asp.net中插入Flash
    向awk中传递数组
    内存泄漏简介
    awk基本语法几则
    自然连接和等值连接
  • 原文地址:https://www.cnblogs.com/cocc/p/6555754.html
Copyright © 2011-2022 走看看