首页 > 解决方案 > 无法从带有 java 的 selenium webdriver 的下拉列表中选择选项

问题描述

我正在尝试从下拉列表中选择一个值。我检查了所有与之相关的帖子,但找不到解决方案。

这是我的下拉列表的 HTML 代码:

<select class="select2 visible" data-val="true" data-val-number="The field ClientId must be a number." id="ClientId" name="ClientId" tabindex="-1" title="" style="display: none;">
<option value="">Client</option>
<option value="22">ABC</option>
<option value="7">ABC1</option>
<option value="18">ABC2</option>
<option value="27">ABC3</option>
<option value="26">ABC4</option>
<option value="31">ABC5</option>
<option value="12">ABC6</option>
<option value="19">ABC7</option>
<option value="72">DGX Client</option>
<option value="57">DS Sampler</option>
<option value="25">Group123</option>
</select>

我在 Selenium Webdriver 中编写的用于获取值的代码:

@FindBy(id="ClientId")
WebElement clientDropDown;
waitTime = new WebDriverWait(driver,20);
waitTime.until(ExpectedConditions.visibilityOf(clientDropDown));
Select client=new Select(clientDropDown);
client.selectByVisibleText("DGX Client");

错误:org.openqa.selenium.TimeoutException:预期条件失败:等待 [[ChromeDriver: chrome on XP (6fa8cbb25476bea9b789aff19a6edf)] -> id: ClientId] 的可见性(尝试 30 秒,间隔 500 毫秒)

在此处输入图像描述

标签: javaseleniumselenium-webdriver

解决方案


在此假设下运行。

看看你的风格select是如何隐藏的:display: none

<select ... style="display: none;">
            ^^^^^^^^^^^^^^^^^^^^^

我认为这是因为它实际上在 UI 上以不同的方式表示,并且select每当实际的下拉表示发生变化时,这是由 javascript 在幕后操纵的。

如果是这种情况,您可以检查实际下拉列表的外观并使用click()命令组合打开下拉列表并选择所需的选项(请注意,在这种情况下您将无法使用Select类,因为它旨在仅用于select元素)。

或者,您可以使select元素可见并继续

String js = "arguments[0].style.display='block'"; 
((JavascriptExecutor) driver).executeScript(js, clientDropDown);

Select client = new Select(clientDropDown);
client.selectByVisibleText("DGX Client");

推荐阅读