这篇文章介绍下拉列表。下拉列表长这样:
有只可以选择一个选项的,也有可以选择多个选项的。先说只能选一个的。该类下拉列表html源代码是这样的:
打开示例网页webelements.html用firebug定位手机品牌那个下拉列表:
介绍操作之前先把准备工作做好。新建一个叫SeleniumDropDownListSingle的java项目 -> 包com.test -> Test.java,添加selenium jar包,把driver声明配置好,把webelements.html网页全屏打开,然后用name定位器写代码:
返回一个下拉列表的对象。因为是跟手机有关,所以起个名叫mobileDropDownList。
通常,只可以选择一个的下拉列表有以下几种操作:
1. 检查是否显示;
2. 检查是否启用;
3. 选择一个选项;
4. 检查哪个被选上了。
前两个还是显示和启用,其实几乎每一个控件都有这两种操作:
第三个是选择一个选项,选项可以通过索引值,选项内容,以及可见文本三种方法来选择:
这三种用哪个都可以,效果是一样的。但是,这些方法都不是用下拉列表对象mobileDropDownList调用的,而是需要用mobileDropDownList先声明一个关于选项的对象,然后用选项的对象再调用。先用索引值示范,上代码:
运行程序,苹果,三星,红米三个值依次被选。看见了吗?它先用mobileDropDownList作为参数创建一个名为mobileOptions的Select对象,你可以把mobileOptions理解成是一个对于选项的对象。Select这个类也是Selenium里自带的,我不知道它是不是为了迎合下拉列表html源代码里面那个Select标签,但大家可以这么记,比较方便。select么,选择的意思,用来创建代表选项的对象。
Index是索引的意思,所以selectByIndex()方法的意思就是按照索引来选择。这里索引指的是选项的位置:第一个选项是0,第二个是1,第三个是2,以此类推。有人估计已经看出来了,这不就是数组的感觉么?没错,就是那感觉,也是从0开始。咱们例子中0对应苹果,1对应三星,2对应红米。而且如果你用想找红米却写成了selectByIndex(3)那就肯定抛异常了。索引作为参数传入该方法,是个整型的数据。
第二个方法是通过选项内容,用selectByValue(),也是用Select类的对象(选项的对象)mobileOptions来调用,参数就是选项的值,也就是下拉列表html代码里
很明显,参数应该用字符串了,不能再用整型了。而且要注意的是,不是之间夹着的那个文字,之间夹着的那个是你刷出网页时显示的文本,也是咱们第三个selectByVisibleText()用到的,不是它的value属性值。虽然这个例子里它们和属性值是一样的,但纯属巧合,下一个例子我保证不这么写了。用selectByValue()的代码如下:
第三个就是selectByVisibleText(),参数用的就是
代码如下:
再强调一遍,selectByValue找的是value属性值,selectByVisibleText找的是
第四个操作检查哪个被选上了,用到的方法是连续调用getFirstSelectedOption()和getText():
以上就是单项选择下拉列表的例子,下一个是关于多项选择的。多项选择的下拉列表html源代码和单项只有一个区别,多了一个multiple=””的属性:
multiple=””其实里面并不用给任何值,它本身就起到了一个标识的作用。上面还有一个size属性,指明列表框有多大,同时可以显示几个选项。你可以随意调节大小,有兴趣的朋友可以多研究研究。webelements.html网页中的多项下拉列表是关于兴趣爱好的:
多项下拉列表除了拥有单项下拉列表的所有常规操作外,还有另外几个:
1. 检查是否显示;
2. 检查是否启用;
3. 选择一个选项;
4. 检查哪个被选上了;
5. 检查是否为多项下拉列表;
6. 选择多个选项;
7. 去掉已选选项。
先看第5种操作,选择多个选项。想想就知道,你可以通过多次使用selectByIndex()/selectByValue()/selectByVisibleText()来把好几个选项同时选上,不会像单选下拉列表那样只能有一个被选。比如我要把上面例子中“足球”和“电影”选上:
第6种操作,去掉已选选项。因为单项下拉列表只能选一个的特点,假如你刚选好一个就后悔了,本来应该选A结果选成B了,那直接改成A就行。多项下拉列表不一样,本来应该选A我选成B了,你如果不去掉B选项就直接选择A结果就是两者同时被选了。所以,去掉已选选项在多项下拉列表中也会经常用到。Selenium提供了两个方法来处理。第一种是通过索引值/选项内容/选项文本去掉指定的某一个选项:
既然可以通过这三者选择,当然也就可以通过这三者去掉选择,其实就是把选择的方法前面加个”de”,select是选择,deSelect是去掉选择,很好理解。参数也一样,index代表位置索引,value代表属性值,visibleText代表中间的东西。比如我的test case是先把“足球”和“看电影”选上,然后去掉“足球”,再把“游泳”选上,代码就是:
第二种方式是直接干脆全去掉,用deSelectAll():
最后一个操作是检查是否为多项下拉列表,用到的方法是isMultiple(),一看is开头的几乎都是返回布尔类型的,是多项返回true,是单项返回false:
以上就是下拉列表的操作,这篇文章的源代码在SeleniumDropDownListSingle和SeleniumDropDownListMulti两个项目中。
本篇知识点及注意事项:
1. 下拉列表可以通过索引值、选项内容、可见文本来选择选项。
2. 和单项下拉列表不同,多项下拉列表换选项时要去掉之前的已选选项。