• selenium webdriver——XPath 定位



    baidu.html代码如下

    ....
    <
    form id="form" class="fm" action="/s" name="f">   <input type="hidden" value="utf-8" name="ie">   <input type="hidden" value="8" name="f">   <input type="hidden" value="1" name="rsv_bp">   <input type="hidden" value="1" name="rsv_idx">   <input type="hidden" value="" name="ch">   <input type="hidden" value="02.." name="tn">   <input type="hidden" value="" name="bar">   <span class="bg s_ipt_wr">     <input id="kw" class="s_ipt" autocomplete="off" maxlength="100" value="" name="wd">   </span>   <span class="bg s_btn_wr">     <input id="su" class="bg s_btn" type="submit" value="百度一下">   </span>
    .....

    1.绝对路径定位

    XPath 的绝对路径主要用标签名的层级关系来定位元素的绝对路径。最外层为html 语言,body 文本内,一级一级往下查找,如果一个层级下有多个相同的标签名,那么就按上下顺序确定是第几个

    用下面的方法来定位百度输入框和搜索按钮

    findElement(By.xpath("/html/body/div/div[2]/div/div/div/from/span/input"))
    findElement(By.xpath("/html/body/div/div[2]/div/div/div/from/span[2]/input"))

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

     

    2.相对路径定位

    //表示当前页面某个目录下,input 表示定位元素的标签名,[@id='kw'] 表示这个元素的id 属性值等于kw。

    findElement(By.xpath("//input[@id='kw']"))
    findElement(By.xpath("//input[@id='su']"))

    如果不想指定标签名也可以用星号(*)代替

    WebElement button = driver.findElement(By.xpath("//*[@id='kw']"));

    使用XPath 不仅仅只局限在id、name 和class 这三个属性值,元素的任意属性值都可以使用,只要它能唯一的标识一个元素。

     

    3.使用逻辑运算符

    遇到一个属性不足以定位一个元素的情况,需要联合其他的属性达到精确定位,类似如下:

    findElement(By.xpath("//input[@id='kw' and @class='su']/span/input"))

    4.模糊定位

    查找图片alt属性开始位置包含'div1'关键字的元素

    //imag[starts-with(@alt,'div')]

    查找图片alt属性结尾位置包含'div1'关键字的元素

    //imag[ends-with(@alt,'div')]

    查找图片alt属性包含'g1'关键字的元素

    //imag[contains(@alt,'g1')]

    5.text() 函数 文本定位

    查找所有文本为"百度搜索" 的元素

    driver.findElement(By.xpath("//*[text()='百度搜索']"));

     比如知乎登录界面的登录按钮:

    可以写成这样:

    driver.findElement(By.xpath("//button[text()='登录']"))

    查找包含搜索的元素

    driver.findElement(By.xpath("//a[contains(text(),'搜索')]"));
  • 相关阅读:
    Redhat安装配置VNC服务器
    Linux下如何强制中断一个程序的执行?
    Linux上怎么快速删除一个目录
    Linux两台服务器上互传文件
    Linux压缩解压命令
    新Linux系统配置yum源
    从零开始,搭建博客系统MVC5+EF6搭建框架(1),EF Code frist、实现泛型数据仓储以及业务逻辑
    [转]关于有偿提供拼图响应式后台的通知
    ASP.NET MVC post请求接收参数的三种方式
    ASP.NET MVC中获取URL地址参数的两种写法
  • 原文地址:https://www.cnblogs.com/hjhsysu/p/5728125.html
Copyright © 2020-2023  润新知