zoukankan      html  css  js  c++  java
  • 【Selenium专题】元素定位之一简单定位

    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.findElements(by.tagName(“**”))或driver.findElements(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正在路上........
  • 相关阅读:
    白盒测试相关内容总结
    黑盒测试相关内容总结
    int.parse的出错异常处理
    逃的过初一逃不过十五之三个输入框文本内容检测的实现及测试
    EditBox问题等价类划分
    关于课堂上Exercise#1的讨论
    js中关于事件处理函数名后面是否带括号的问题
    关于提升和作用域的一道有趣的题目
    绝对定位对元素宽度的影响
    js异步函数队列
  • 原文地址:https://www.cnblogs.com/sylvia-liu/p/4469084.html
Copyright © 2011-2022 走看看