Selenium Select - 按部分文本选择下拉选项

Joh*_*nny 6 java selenium webdriver selenium-chromedriver selenium-webdriver

Selenium Select类有 3 种不同的选项选择方法:

  1. 按索引选择
  2. 按值选择
  3. 选择可见文本

现在,我有一种情况,我想通过一些文本来选择一个选项,这些文本部分出现在一个选项可见文本中(不想让自己暴露在整个文本中的更改中)。

例如:

<option value="0" label="not-intresting">VERY-LONG-TEXT-THAT-I-NEED-TO-SELECT-DOLLAR</option>
Run Code Online (Sandbox Code Playgroud)

我只想通过提供“美元”来选择此选项,例如:

select.selectByPartOfVisibleText("DOLLAR") 
Run Code Online (Sandbox Code Playgroud)

你将如何有效地实施它?

Cas*_*h_m 6

我的解决方案是使用 xpath 来查找作为选择子项的选项。可以使用任何 xpath 方法来查找选择;在这个例子中,我找到了 id 的选择。

List<WebElement> options = driver.findElements(By.xpath("//select[@id = 'selectId')]/option"));

for (WebElement option : options) {
    if (option.getText().contains("DOLLAR")) {
        option.click();
        break;
    }
}
Run Code Online (Sandbox Code Playgroud)

经过更多思考,我意识到可以完全使用 xpath 找到该选项:

driver.findElements(By.xpath("//select[@id = 'selectId')]/option[contains(text(), 'DOLLAR')]")).click();
Run Code Online (Sandbox Code Playgroud)


Zac*_*ach 5

您可以尝试这样的逻辑希望这会有所帮助

List <WebElements> optionsInnerText= driver.findElements(By.tagName("option"));
for(WebElement text: optionsInnerText){
    String textContent = text.getAttribute("textContent");
    if(textContent.toLowerCase.contains(expectedText.toLowerCase))
           select.selectByPartOfVisibleText(expectedText);
    }
}
Run Code Online (Sandbox Code Playgroud)