Selenium处理select标签的下拉框

前端技术 2023/09/02 Java

Selenium是一个开源的和便携式的自动化软件测试工具,用于测试Web应用程序有能力在不同的浏览器和操作系统运行。Selenium真的不是一个单一的工具,而是一套工具,帮助测试者更有效地基于Web的应用程序的自动化。

有时候我们会碰到<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\"); //审核不通过
}
}

本文地址:https://www.stayed.cn/item/4481

转载请注明出处。

本站部分内容来源于网络,如侵犯到您的权益,请 联系我

我的博客

人生若只如初见,何事秋风悲画扇。