selenium处理select标签的下拉框

  有时候我们会碰到<select></select>标签的下拉框。直接点击下拉框中的选项不一定可行。Selenium专门提供了Select类来处理下拉框。

<select id="status" class="form-control valid" onchange="" name="status">
    <option value=""></option>
    <option value="0">未审核</option>
    <option value="1">初审通过</option>
    <option value="2">复审通过</option>
    <option value="3">审核不通过</option>
</select>

Python-selenium中的操作

  先以python为例,查看Selenium代码select.py文件的实现:

  ...\selenium\webdriver\support\select.py

class Select:

    def __init__(self, webelement):
        """
        Constructor. A check is made that the given element is, indeed, a SELECT tag. If it is not,
        then an UnexpectedTagNameException is thrown.

        :Args:
         - webelement - element SELECT element to wrap

        Example:
            from selenium.webdriver.support.ui import Select \n
            Select(driver.find_element_by_tag_name("select")).select_by_index(2)
        """
        if webelement.tag_name.lower() != "select":
            raise UnexpectedTagNameException(
                "Select only works on <select> elements, not on <%s>" %
                webelement.tag_name)
        self._el = webelement
        multi = self._el.get_attribute("multiple")
        self.is_multiple = multi and multi != "false"

  查看Select类的实现需要一个元素的定位。并且Example中给了例句。

  Select(driver.find_element_by_tag_name("select")).select_by_index(2)

def select_by_index(self, index):
        """Select the option at the given index. This is done by examing the "index" attribute of an
           element, and not merely by counting.

           :Args:
            - index - The option at this index will be selected
           """
        match = str(index)
        matched = False
        for opt in self.options:
            if opt.get_attribute("index") == match:
                self._setSelected(opt)
                if not self.is_multiple:
                    return
                matched = True
        if not matched:
            raise NoSuchElementException("Could not locate element with index %d" % index)

  继续查看select_by_index() 方法的使用并符合上面的给出的下拉框的要求,因为它要求下拉框的选项必须要有index属性,例如index=”1”。

def select_by_value(self, value):
        """Select all options that have a value matching the argument. That is, when given "foo" this
           would select an option like:

           <option value="foo">Bar</option>

           :Args:
            - value - The value to match against
           """
        css = "option[value =%s]" % self._escapeString(value)
        opts = self._el.find_elements(By.CSS_SELECTOR, css)
        matched = False
        for opt in opts:
            self._setSelected(opt)
            if not self.is_multiple:
                return
            matched = True
        if not matched:
            raise NoSuchElementException("Cannot locate option with value: %s" % value)

  继续查看select_by_value() 方法符合我们的要求,它用于选取<option>标签的value值。最终,可以通过下面有实现选择下拉框的选项。

from selenium.webdriver.support.select import Select

……
sel = driver.find_element_by_xpath("//select[@id=‘status‘]")
Select(sel).select_by_value(‘0‘)  #未审核
Select(sel).select_by_value(‘1‘)  #初审通过
Select(sel).select_by_value(‘2‘)  #复审通过
Select(sel).select_by_value(‘3‘)  #审核不通过

Java-selenium中的操作

  当然,在java中的用法也类似,唯一不区别在语法层面有。

package com.jase.base;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.By.ById;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.ui.Select;

public class SelectTest {

    public static void main(String[] args){

        WebDriver driver = new  ChromeDriver();
        driver.get("http://www.you_url.com");

        // ……

        Select sel = new Select(driver.findElement(ById.xpath("//select[@id=‘status‘]")));
        sel.selectByValue("0"); //未审核
        sel.selectByValue("1"); //初审通过
        sel.selectByValue("2"); //复审通过
        sel.selectByValue("3"); //审核不通过
    }
}
时间: 2024-10-14 23:45:53

selenium处理select标签的下拉框的相关文章

给select标签设置下拉框高度

最近的需求涉及有下拉框,突然想到如果下拉选项过多的话可能要对下拉框的高度做一下限制,查了一下select标签,有size这个属性,原以为可以实现. <!DOCTYPE html> <html> <body> <select size="3" style="width:100px"> <option value="volvo">Volvo</option> <option

用HTML的select+option标签实现下拉框

10.4.2 HTML option 标签 option 标签 -- select菜单中的一个选项 option标签是成对出现的,以<option>开始,以</option>结束 引用网址:http://www.dreamdu.com/xhtml/tag_option/ 属性. common -- 公共属性 disabled -- 输入域无法获得焦点.无法选择,以灰色显示,在表单中不起任何作用 label -- 选择项的短标签 value -- 选项的初始值,未设置时为option

selenium测试(Java)--下拉框(二十一)

例子: 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="UTF-8"> 5 <title>calc</title> 6 <script> 7 function calcResult() { 8 var num1 = document.getElementById("id1").value; 9 var calctag = do

吾八哥学Selenium(四):操作下拉框select标签的方法

我们在做web页面自动化测试的时候会经常遇到<select></select>标签的下拉框,那么在Python里如何实现去操作这种控件呢?今天就给大家分享一下这个玩法.为了让大家学习更方便,我准备了一个测试页面. 测试的html页面代码为: <html> <head> <title>学Python网 - Selenium学习测试页面</title> <body> 请选择2018年春节回家的方式! <select id

下拉框处理(select)

转:http://www.imdsx.cn/index.php/2017/12/04/select/ 在UI自动化测试过程中,经常会遇到一些下拉框,我们有三种可选方式来操作下拉框. 第一种方法 基于webdriver的两次click,很容易出现问题,不建议使用.(由于部分下拉框在点击一次后,失去焦点再点下一次时可能下拉框中的参数就消失了,那么就无法进行选择了,所以会出现无法定位到目标元素或目标元素不可见的问题.) 第二种方法 基于Action Chains进行连贯操作,首先点击下拉框,然后移动到

Selenium—选择框的相关操作(单选框、多选框、复选框、下拉框)

编辑框 无缺省值:第二个输入框 可直接对输入框进行编辑: driver.find_element_by_id('input2').send_keys('selenium') 有缺省值:第一个输入框,默认 test 此时,如果我们直接对第一个输入框进行编辑,会发现与预期结果不符 driver.find_element_by_id('input1').send_keys('selenium') 因此,如果需要对存在默认值的输入框进行编辑,则需先进行清楚操作,然后再进行编辑 driver.find_e

jquery操作select下拉框的多种方法(选中,取值,赋值等)

jQuery获取Select选择的Text和Value:语法解释:1. $("#select_id").change(function(){//code...});   //为Select添加事件,当选择其中一项时触发2. var checkText=$("#select_id").find("option:selected").text();  //获取Select选择的Text3. var checkValue=$("#select

jquery操作select下拉框的多种方法(选中,取值,赋值等) 转载

jQuery获取Select选择的Text和Value: 语法解释: 1. $("#select_id").change(function(){//code...});   //为Select添加事件,当选择其中一项时触发 2. var checkText=$("#select_id").find("option:selected").text();  //获取Select选择的Text 3. var checkValue=$("#se

bootstrap select 下拉框没选择

情况:根据取得的值去选定select下拉框的选项.但不知为何每次根据select的id传递值过去了,也能取得对应的值,但是页面上的select依然是下拉框第一个选项,但点击下拉框时,会在对应的值有特殊css(选中标志),即改变了值,却没改变现实的值.原因:设置select的选中的option,并没有修改对应的span的值跟title.<span class="select2-selection__rendered" id="select2-字段ID-container&