Selenium Web Driver自动化测试(java版)系列下半部分(7) - name,classname,tagname定位器

上篇我们讨论了网页控件查找工具以及id定位器,这篇介绍name,classname和tagname,一下讲三个。这三个都有name,可以放在一起记。

第一个,name。name定位器的语法格式是

Selenium Web Driver自动化测试(java版)系列下半部分(7) - name,classname,tagname定位器_第1张图片

举个例子,用FirBug检查webelements.html网页的“确定”按钮,发现它有一个属性叫name:

Selenium Web Driver自动化测试(java版)系列下半部分(7) - name,classname,tagname定位器_第2张图片

新建一个java项目叫SeleniumName -> 包com.test -> Test.java,把该引的selenium jar包引进来,把driver设置创建好。在里面写如下代码验证“确定”按钮:

Selenium Web Driver自动化测试(java版)系列下半部分(7) - name,classname,tagname定位器_第3张图片

这次定位的网页控件对象是一个按钮,我给它起个名字叫confirmBtn。它有一个叫getAttribute(String property)的方法,可以接收元素的属性名称作为参数并得到属性的值。“确定”按钮有一个属性叫value,它的值就是“确定”,所以我们可以通过打印出它的属性值来判断该按钮是不是被定位了。

细心的朋友还会发现它也有id属性。我举这个例子的意思就是提醒大家一个元素可以有多个属性,可以有id,name,value,text等等。不熟悉html的朋友可以下去再温习一下。上次说了,有id的情况下最好用id,因为它在同一页面唯一标识。但我们这个例子是为了演示name,就不吹毛求疵了。你用id和name都可以找到该元素,我建议大家没事的时候可以试试,反正怎么试都不可能不成功。

和id定位器不一样,name不是同一网页唯一标识的。也就是说,同一网页上不同元素可以有相同的name属性值。这下就不得不面对这个问题了:你怎么知道用findElement取的是哪个元素的?看下面的例子,“确定”按钮不远处有个“退出”按钮,它也有name="confirm":

Selenium Web Driver自动化测试(java版)系列下半部分(7) - name,classname,tagname定位器_第4张图片

它俩写出来都是driver.findElement(By.name("confirm")),定位的是哪个呢?selenium规定,findElement找到的是当前页面第一个匹配的元素,谁在最前面选谁。按规矩“确定”按钮胜出。

以上就是name定位器的讲解。第二个要说的是className,它通过class属性查找网页元素。className定位器的语法格式是

Selenium Web Driver自动化测试(java版)系列下半部分(7) - name,classname,tagname定位器_第5张图片

注意,用id的时候取的属性名称是id,用name的时候取的属性名称是name,但是,用classname的时候取的属性名称是class,不是classname!网页元素没有classname这么一个属性,只有class。这也是html相关的知识。“确定”按钮旁边还有个按钮叫“取消”,我们用firebug查一下它:

Selenium Web Driver自动化测试(java版)系列下半部分(7) - name,classname,tagname定位器_第6张图片

看见那个叫class的属性了吗?值是“CANCEL”。照葫芦画瓢写classname定位“取消”按钮:

Selenium Web Driver自动化测试(java版)系列下半部分(7) - name,classname,tagname定位器_第7张图片

同样,classname也不是同一网页唯一标识,findElement的时候会定位第一个匹配的。所有定位器里只有id需要唯一,别的都不是,所以还是那句话,一个元素可以用多个定位器的时候选id,最简单。

最后说tagName。猜也能猜的着格式是:

Selenium Web Driver自动化测试(java版)系列下半部分(7) - name,classname,tagname定位器_第8张图片

都是套路。然后呢?有人说了,简单,className找class,那tagName当然就找tag啦!你去找吧,一个网页找不着找两个,两个找不着找三个,别着急,反正永远也找不着。注意,id,name和classname这些定位器们找的都是网页控件的属性,但tagName找的不是属性,而是标记的名称,比如

你可能感兴趣的:(Selenium Web Driver自动化测试(java版)系列下半部分(7) - name,classname,tagname定位器)