python selenium 下拉框选择_【selenium】基于python语言,如何用select选择下拉框

在项目测试中遇到了下拉框选择的控件,来总结下如何使用select选择下拉框:

下图是Select类的初始化描述,意思是,给定元素是得是select类型,不是就抛异常。接下来给了例子:要操作这个select,先要定位到,然后再通过select_by_index 选择下拉框

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 elements, not on " %

webelement.tag_name)

self._el = webelement

multi = self._el.get_attribute("multiple")

self.is_multiple = multi and multi != "false"

1、select_by_value:

看下代码:

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:

Bar

:Args:

- value - The value to match against

throws NoSuchElementException If there is no option with specisied value in SELECT

"""

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)

就是说使用这个方法,下拉框属性需要有value,如果选项中不具有指定值的项,就抛异常。例如:

2、select_by_index

看下代码:

1 defselect_by_index(self, index):2 """Select the option at the given index. This is done by examing the "index" attribute of an3 element, and not merely by counting.4

5 :Args:6 - index - The option at this index will be selected7

8 throws NoSuchElementException If there is no option with specisied index in SELECT9 """

10 match =str(index)11 for opt inself.options:12 if opt.get_attribute("index") ==match:13 self._setSelected(opt)14 return

15 raise NoSuchElementException("Could not locate element with index %d" % index)

这个是通过元素的“index”属性来完成

3、select_by_visible_text

看下代码:

1 defselect_by_visible_text(self, text):2 """Select all options that display text matching the argument. That is, when given "Bar" this3 would select an option like:4

5 Bar6

7 :Args:8 - text - The visible text to match against9

10 throws NoSuchElementException If there is no option with specisied text in SELECT11 """

12 xpath = ".//option[normalize-space(.) = %s]" %self._escapeString(text)13 opts =self._el.find_elements(By.XPATH, xpath)14 matched =False15 for opt inopts:16 self._setSelected(opt)17 if notself.is_multiple:18 return

19 matched =True20

21 if len(opts) == 0 and " " intext:22 subStringWithoutSpace =self._get_longest_token(text)23 if subStringWithoutSpace == "":24 candidates =self.options25 else:26 xpath = ".//option[contains(.,%s)]" %self._escapeString(subStringWithoutSpace)27 candidates =self._el.find_elements(By.XPATH, xpath)28 for candidate incandidates:29 if text ==candidate.text:30 self._setSelected(candidate)31 if notself.is_multiple:32 return

33 matched =True34

35 if notmatched:36 raise NoSuchElementException("Could not locate element with visible text: %s" % text)

通过选择文本来匹配,然后给出了例子。看下我的例子:

我的代码:

1 stafftype_loc = (By.XPATH, "//select[@ng-model='Invite.type']")2

3 find_element(*self.stafftype_loc).send_keys(stftype)

你可能感兴趣的:(python,selenium,下拉框选择)