硒确定选择选项是否可见

时间:2018-10-18 21:14:39

标签: java selenium html-select

我正在尝试根据其是否可见在select元素中选择一个选项。

是否仍然可以确定选择项中的选项是否可见?它们在CSS中具有该属性,但是硒没有.isDisplayed元素的Select方法。

    // Select page role permission
    Select pageRole = new Select (driver.findElement(By.id("page_roles")));
    pageRole.selectByIndex(1);

4 个答案:

答案 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"));