selenium的下拉选择框

news/2024/7/7 14:36:47

今天总结下selenium的下拉选择框。我们通常会遇到两种下拉框,一种使用的是html的标签select,另一种是使用input标签做的假下拉框。

后者我们通常的处理方式与其他的元素类似,点击或使用JS等。而对于前者,selenium给了有力的支持,就是Select类。

我们要进行试验的网站:http://sahitest.com/demo/selectTest.htm

网页与源码截图如下:

测试网页截图

1.导入(import)

你可以用以下方式导入:

from selenium.webdriver.support.ui import Select
# 或者直接从select导入
# from selenium.webdriver.support.select import Select

 

这两种方法没有本质的区别,你如果去看ui库,你会发现,它也只是把select import进去。

2.选择(select)

Select类提供了三种选择某一选项的方法:

select_by_index(index)
select_by_value(value) select_by_visible_text(text)

 

针对于示例网站中的第一个select框:

<select id="s1Id">
<option></option>
<option value="o1" id="id1">o1</option> <option value="o2" id="id2">o2</option> <option value="o3" id="id3">o3</option> </select>

 

我们可以这样定位:

from selenium import webdriverd
from selenium.webdriver.support.ui import Select

driver = webdriver.Firefox()
driver.get('http://sahitest.com/demo/selectTest.htm') s1 = Select(driver.find_element_by_id('s1Id')) # 实例化Select s1.select_by_index(1) # 选择第二项选项:o1 s1.select_by_value("o2") # 选择value="o2"的项 s1.select_by_visible_text("o3") # 选择text="o3"的值,即在下拉时我们可以看到的文本 driver.quit()

 

以上是三种选择下拉框的方式,注意:

  1. index从 0 开始
  2. value是option标签的一个属性值,并不是显示在下拉框中的值
  3. visible_text是在option标签中间的值,是显示在下拉框的值

3.反选(deselect)

自然的,有选择必然有反选,即取消选择。Select提供了四个方法给我们取消原来的选择:

deselect_by_index(index)
deselect_by_value(value) deselect_by_visible_text(text) deselect_all()

前三种分别于select相对应,第四种是全部取消选择,是的,你没看错,是全部取消。有一种特殊的select标签,即设置了multiple=”multiple”属性的select,这种select框是可以多选的,你可以通过多次select,选择多项选项,而通过deselect_all()来将他们全部取消。

全选?NO,不好意思,没有全选,不过我想这难不倒你,尤其是看了下面的这几个属性。

4.选项(options)

当我们选择了选项之后,想要看看选择的是哪项,所选的是否是我想选的,怎么办?别担心,Select为你提供了相应的方法(或者应该说是属性了):

options
all_selected_options
first_selected_option

 

上面三个属性,分别返回这个select元素所有的options、所有被选中的options以及第一个被选中的option。

1 想查看一个select所有的选项

...

s1 = Select(driver.find_element_by_id('s1Id'))

for select in s1.options:
    print select.text

...

 

结果:


o1
o2
o3

 

一共四项,第一项为空字符串。

2 想查看我已选中的选项

...

s4 = Select(driver.find_element_by_id('s4Id'))

s4.select_by_index(1)
s4.select_by_value("o2val")
s4.select_by_visible_text("With spaces") s4.select_by_visilbe_text(" With nbsp") for select in s4.all_selected_options: print select.text ...

 

结果:

o1
o2
    With spaces
    With nbsp

 

输出所有被选中的选项,适合于能多选的框,仅能单选的下拉框有更合适的方法(当然用这种方法也可以)。这里需要注意的是两种不同空格的选择:

  1. 空格’ ‘,这种在以visible_text的方式选择时,不计空格,从第一个非空格字符开始
  2. 网页空格& nbsp;,对于这种以nbsp为空格的选项,在以visible_text的方式选择时,需要考虑前面的空格,每一个nbsp是一个空格

3 想要查看选择框的默认值,或者我以及选中的值

...

s2 = Select(driver.find_element_by_id('s2Id'))

print s2.first_selected_option.text

s2.select_by_value("o2")
print s2.first_selected_option.text

...

 

 

结果:


o2

 

第一行输出默认选项的文本——空字符串”“;第二行输出选中的选择的文本——”o2”。

5.总结

    • Select提供了三种选择方法:

      select_by_index(index) ——通过选项的顺序,第一个为 0 
      select_by_value(value) ——通过value属性 
      select_by_visible_text(text) ——通过选项可见文本

    • 同时,Select提供了四种方法取消选择:

      deselect_by_index(index) 
      deselect_by_value(value) 
      deselect_by_visible_text(text) 
      deselect_all()

    • 此外,Select提供了三个属性方法给我们必要的信息:

      options ——提供所有的选项的列表,其中都是选项的WebElement元素 
      all_selected_options ——提供所有被选中的选项的列表,其中也均为选项的WebElement元素 
      first_selected_option ——提供第一个被选中的选项,也是下拉框的默认值

    • 通过Select提供的方法和属性,我们可以对标准select下拉框进行任何操作,但是对于非select标签的伪下拉框,就需要用其他的方法了,这个有机会再讨论。

转载于:https://www.cnblogs.com/z-x-y/p/9020833.html


http://www.niftyadmin.cn/n/4557890.html

相关文章

这个程序怎么出错了

只可能是你的运行环境有问题啊 ||| vs2008下运行正常 score &score);switch((int)score/10){case 10:case 9:gradeA;break;case 8:gradeB;break;case 7:gradeC;break;case 6:gradeD;break;case 5:case 4:case 3:case 2:case 1:case 0:gradeE;break;} printf("%5.1f %c…

一图文让你成为密码算法安全专家:国密算法与国际算法揭秘

http://baijiahao.baidu.com/s?id1569979991480327&wfrspider&forpc转载于:https://www.cnblogs.com/cqufengchao/articles/9023441.html

Visual c++6 编译器下载地址

searchMicrosoft%20Visual%20C%2B%2B%206.0&restype-1&id10000000&ty0&pattern0 ||| 最好自己去迅雷下载 734200015 如果需要我可以用QQ邮箱传给你 配套使用比较好用 cid7497C46991962334EBE62CD8A838BA92479CBF11&t2&fmt-1&redirectno ||| http:/…

路由Router

路由&#xff1a; 浏览器中的哈希值&#xff08;hash&#xff09;与展示视图内容&#xff08;template&#xff09;之间的对应规则&#xff1b; Vue中的路由&#xff1a;hash和component的对应关系。 路由就是一套映射规则&#xff0c;当URL中的哈希值发生改变后&#xff0c;…

C 语言的一道题~

||| 可以 ||| 不能 但如此麻烦 但是如果输入的值为1-100就要100条case语句了 但一般人不会这么做 而且碰巧这次的等级划分还算有规律可找 如果想要判断输入的边界 &sc);switch((sc-55)/10){case 0:printf("不及格");break;case 1:printf("合格");break…

Git通用流程

工作区&#xff0c;暂存区&#xff0c;本地仓库&#xff0c;远程仓库&#xff01;

前端切图|点击按钮div变色

图片.png图片.png<!DOCTYPE html> <html> <head> <title>点击按钮div变色.html</title> <meta charset"utf-8" /> </head> <body> <!--点击改变当前div的颜色&#xff0c;所以要给onclick这个事件的函数传…

HTML跟C语言怎么这么难啊 天啊

我是学这两个的 急不来的 ||| 晕 把学习养成一种习惯~~这样就会很容易上手 我觉得不是你说得这么样 少去玩 ||| 不会吧这只是两个最基本的语言看来主要是你不用心 知难而退 没有进取精神别那么悲观 只要你多看多写 ||| HTML应该算是最简单的一种编程语言了 多上机练习就好啦 ||…