【Selenium专题】元素定位之一简单定位

系统 1898 0

UI自动化工具千变万化、架构千变万化,但都逃离不开的关键一步就是元素定位。下面以Selenium为例介绍常见的几个元素定位方法

ID - 元素id属性

WebElement El = driver.findElement(by.id(“id”))

name- 元素name属性

WebElement El=driver.findElement(by.name(“name”))

className -元素class属性

WebElement El = driver.findElement(by.className(“className”));

tagName- 元素标签名

WebElement El = driver.findElement(by.tagName(“button”))

linkText- 链接元素a的显示文字

WebElement El = driver.findElement(By.linkText("Inbox"));

partialLinkText

WebElement El = driver.findElement(By.partialLinkText("Inbox"));


 

补充:以上知识遍地都有,不多赘述。但真实环境中遇到的DOM往往很复杂的多,下面我们来分析一下可能会遇到的几种情况


1. 分级定位: 复杂环境可以先定位父级元素,然后再定位子元素,例如parentElement.findElement(By.***)

2.ID定位是最快速最准确的,但实际上需要开发人员的友好配合才能有唯一且确定的id可用,真实环境中往往会出现没有id,id重复或者动态id(extjs和query都是动态id);若动态id有规律我们还能考虑使用正则表达式,否则只能老老实实另谋出路了。

3. 定位数组元素 :实际使用中className和tagName经常被用来定位数组元素,例如driver.findElement s (by.tagName(“**”))或driver.findElement s (by.className(“**”))

  例如,打开www.baidu.com,运行List<WebElement> Els= driver.findElements(by.tagName(“a”));看看是不是得到了一个元素数组

4. className不允许使用复合类名做参数

   真实环境中元素往往使用复合类名(即多个class用空格分隔),使用className定位时要注意了,className的参数只能是一个class。

  例如,打开http://hao.360.cn/,我们要使用className定位这个元素

      
        <
      
      
        a 
      
      
        
          
            class
          
          
            ="tab-item news"
          
        
      
      
         data-page
      
      
        ="http://sh.qihoo.com/daohang/index1.html"
      
      
         hidefocus
      
      
        ="false"
      
      
        href
      
      
        ="./brother.html#!news"
      
      
        >
      
      新闻头条
      
        </
      
      
        a
      
      
        >
      
    

  1)执行driver.findElements(by.className("news")),成功定位到元素

  2)执行driver.findElements(by.className("tab-item news")),定位失败,报错信息: Compound class names not permitted,意思是 不允许使用 复合类名称

  分析:className的参数仅允许是一个class,此处 class="tab-item news" 是复合类名,直接使用会报错

5. linkText与 partialLinkText

  遇到文字链接元素,首先考虑使用linkText定位,那它与partialLinkText有什么区别与特性呐?

  1) linkText=链接文字,表示精准匹配链接文字;partialLinkText=部分链接文字,表示模糊匹配链接文字。例如定位一下元素

      
        <
      
      
        a 
      
      
        target
      
      
        ="_blank"
      
      
         title
      
      
        =""
      
      
         href
      
      
        ="http://www.nuomi.com/?cid=bdsywzl"
      
      
        >
      
      劳动节不劳动,吃喝玩乐5.1元起!
      
        </
      
      
        a
      
      
        >
      
    

 

    | driver.findElement(By.linkText("劳动节不劳动,吃喝玩乐5.1元起!"));

    | driver.findElement(By.partialLinkText("吃喝玩乐"));

  2.都对大小写敏感

 

 

    这篇文章对两者进行了详细的介绍并附有案例
    
      http://blog.csdn.net/aerchi/article/details/8931023
      


复杂定位:cssselector、xpath、javascript正在路上........

 

【Selenium专题】元素定位之一简单定位


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论