我正在尝试根据其是否可见在select元素中选择一个选项。
是否仍然可以确定选择项中的选项是否可见?它们在CSS中具有该属性,但是硒没有.isDisplayed
元素的Select
方法。
// Select page role permission
Select pageRole = new Select (driver.findElement(By.id("page_roles")));
pageRole.selectByIndex(1);
答案 0 :(得分:2)
我们可以直接使用选项定位器进行检查,以检查如下所示的可见性,
driver.findElements(By.cssSelector("#page_roles option[value='1']"))
但是isDisplayed()如果不存在,将抛出异常。我们必须通过检查findelements中的大小来检查元素的存在。
因此您可以使条件类似
按选项选择:
if(driver.findElements(By.cssSelector("#page_roles option[value='1']")).size() > 0){
Select pageRole = new Select (driver.findElement(By.id("page_roles")));
pageRole.selectByIndex(1);
}
按可见文本选择:
String userRole="Admin";
if(driver.findElements(By.xpath("//[@id='page_roles'/option[text() ='"+userRole+"']")).size() > 0){
Select pageRole = new Select (driver.findElement(By.id("page_roles")));
pageRole.selectByVisibleText(userRole);
}
答案 1 :(得分:-1)
您可以为此使用xpath
这应该有效:
EventTarget
答案 2 :(得分:-1)
这取决于可见性的含义。如果您是说.isDisplayed()
,那么所有OPTION
都是可见的(根据Selenium而言),无论它们实际上是否可见。
例如,转到http://the-internet.herokuapp.com/dropdown,然后发现该页面上有一个SELECT
元素,其中包含两个OPTION
,即“选项1”和“选项2”。如果您使用Selenium找到它们并返回.isDisplayed()
,即使在默认状态下,它们都未选中(并且用户不可见),它们都将返回true
。
我认为您真正要寻找的是它们是否存在于选项列表中。如果这是您的意思,我们可以确定。下面的函数是针对上面的链接而构建的。它会在下拉列表中获取选项列表,从每个选项中提取文本,然后比较您传递的字符串以查看它是否可用。
public static boolean optionExists(String option)
{
return new Select(driver.findElement(By.id("dropdown"))).getOptions().stream().map(e -> e.getText()).collect(Collectors.toList())
.contains(option);
}
您可以像这样使用它。
String option = "Option 3";
if (optionExists(option))
{
new Select(driver.findElement(By.id("dropdown"))).selectByVisibleText(option);
}
您可以根据需要将它们链接在一起。您还可以在方法中使用optionExists中的代码,该方法根据提供的字符串列表设置值。它可以遍历列表,检查每个列表是否存在,然后选择找到的第一个列表……。我留给你...
答案 3 :(得分:-2)
您可以尝试创建包含您所定义的属性的选项列表:
List<WebElement> visibleOptions = pageRole.findElements(By.cssSelector("Visible css class"));