51Testing软件测试论坛

标题: selenium处理select标签的下拉框 [打印本页]

作者: 老白的释然    时间: 2018-4-2 16:02
标题: selenium处理select标签的下拉框
有时候我们会碰到<select></select>标签的下拉框。直接点击下拉框中的选项不一定可行。Selenium专门提供了
Select类来处理下拉框。



复制代码
  1. <select id="status" class="form-control valid" onchange="" name="status">
  2.     <option value=""></option>
  3.     <option value="0">未审核</option>
  4.     <option value="1">初审通过</option>
  5.     <option value="2">复审通过</option>
  6.     <option value="3">审核不通过</option>
  7. </select>
复制代码

复制代码




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

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

复制代码
  1. class Select:

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

  6.         :Args:
  7.          - webelement - element SELECT element to wrap
  8.         
  9.         Example:
  10.             from selenium.webdriver.support.ui import Select \n
  11.             Select(driver.find_element_by_tag_name("select")).select_by_index(2)
  12.         """
  13.         if webelement.tag_name.lower() != "select":
  14.             raise UnexpectedTagNameException(
  15.                 "Select only works on <select> elements, not on <%s>" %
  16.                 webelement.tag_name)
  17.         self._el = webelement
  18.         multi = self._el.get_attribute("multiple")
  19.         self.is_multiple = multi and multi != "false"
复制代码

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

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

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

  4.            :Args:
  5.             - index - The option at this index will be selected
  6.            """
  7.         match = str(index)
  8.         matched = False
  9.         for opt in self.options:
  10.             if opt.get_attribute("index") == match:
  11.                 self._setSelected(opt)
  12.                 if not self.is_multiple:
  13.                     return
  14.                 matched = True
  15.         if not matched:
  16.             raise NoSuchElementException("Could not locate element with index %d" % index)
复制代码

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



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

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

  5.            :Args:
  6.             - value - The value to match against
  7.            """
  8.         css = "option[value =%s]" % self._escapeString(value)
  9.         opts = self._el.find_elements(By.CSS_SELECTOR, css)
  10.         matched = False
  11.         for opt in opts:
  12.             self._setSelected(opt)
  13.             if not self.is_multiple:
  14.                 return
  15.             matched = True
  16.         if not matched:
  17.             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                                                     
  当然,在java中的用法也类似,唯一不区别在语法层面有。

复制代码
  1. package com.jase.base;

  2. import org.openqa.selenium.WebDriver;
  3. import org.openqa.selenium.By.ById;
  4. import org.openqa.selenium.chrome.ChromeDriver;
  5. import org.openqa.selenium.support.ui.Select;

  6. public class SelectTest {

  7.     public static void main(String[] args){
  8.         
  9.         WebDriver driver = new  ChromeDriver();
  10.         driver.get("http://www.you_url.com");
  11.         
  12.         // ……
  13.         
  14.         Select sel = new Select(driver.findElement(ById.xpath("//select[@id='status']")));
  15.         sel.selectByValue("0"); //未审核
  16.         sel.selectByValue("1"); //初审通过
  17.         sel.selectByValue("2"); //复审通过
  18.         sel.selectByValue("3"); //审核不通过
  19.     }
  20. }
复制代码



作者: 梦想家    时间: 2018-4-4 15:42





欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2