【问题标题】:Selenium Select Can't locate optionsSelenium Select 找不到选项
【发布时间】:2015-07-22 04:07:42
【问题描述】:

当我找到并分配一个 Select 对象来获取其选项时,我遇到了一个问题,这可能是由于页面上的一些不稳定的 HTML。这是 Select 及其选项的 HTML:

<select>
<option selected="" val="1">1</option>
<option val="2">2</option>
<option val="3">3</option>
<option val="4">4</option>
<option val="5">5</option>
...
</select>

选择是使用 XPath 定位的:.//*[@id='employeeTable_paginate']/div/select

我想知道它是否无法找到选项,因为values 在 HTML 中被称为vals?我尝试了以下代码,看看它是否会得到选项:

for (WebElement option : select.getOptions()) System.out.println(option);

但它不打印任何东西。此外,如果我尝试按索引选择一个选项,它会说它无法找到具有该索引的选项。

【问题讨论】:

    标签: java html selenium selenium-webdriver


    【解决方案1】:

    selectByValue 在这种情况下绝对行不通。如果去implementation of Select,可以看到selectByValue()使用xpath查找value字段。好消息是它很容易解决。

    对于您的情况,您需要找到单个值(改为搜索 val),然后选择它。

    WebElement option = element.findElement(By.xpath(
            ".//option[@val = '" + value + "']"));
    
    if (!option.isSelected())
    {
        option.click();
    }
    

    我不确定为什么 selectByIndex 不起作用,你能检查一下select.getOptions() 的计数吗?选择对象总是有可能不正确。

    【讨论】:

    • 所以,select.getOptions().size() 给我的结果为 0。这对我来说没有意义,因为使用 Select select = new Select(SeleniumCommands.waitFindByXpath(".//*[@id='employeeTable_paginate']/div/select")); 找到 Select 选项我确认这是正确的选择方法,因为如果我使用我单击此元素的方法,它将正确单击它。这不符合正确的 Select 对象吗?这是我唯一能想到的......
    • 另外,我想提一下 .//option[@val = " + Quotes.escape(value) + "]" 对我不起作用,尽管我确实使用了 \" 而不是您的 Quotes 对象。
    • @Imcphers 报价应该在 org.openqa.selenium.support.ui.Quotes 下,但无论如何我都会更改它。您的方式也可以,另一种选择是使用单引号。
    • @Imcphers 这个新选择是否有效?奇怪的是 getOptions() 是空的,你能检查一下网站并验证选项的标签名称是 'option',它们有正确的索引,并且整个事情不在 iframe 中吗?
    • 是的,标签是“选项”。出于某种原因,当我最初复制和粘贴 HTML 时,它并不“准确”,但我更正了它。它几乎相同,只是包括选项中的值。它不在 iFrame 中,因为我可以单击 Select 对象,然后通过直接 Xpath 单击 Option。我似乎无法让它与 Select 对象一起使用,因为我在单击 XPath 选项时遇到了奇怪的行为,所以我想以这种方式尝试一下,看看我是否得到相同的行为。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-23
    • 1970-01-01
    相关资源
    最近更新 更多