51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 2367|回复: 1
打印 上一主题 下一主题

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

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2018-4-17 11:56:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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.ta
gName(“**”))或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 n
ames 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.都对大小写敏感

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2024-11-18 00:42 , Processed in 0.064703 second(s), 28 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表