我必须执行选择操作,即从下拉列表中选择一个值。这是我的iframe的代码:
<div class="js-stools-field-filter">
<select id="filter_active" name="filter[active]" onchange="this.form.submit();" style="display: none;">
<option value="" selected="selected">- Select Active State -</option>
<option value="0">Activated</option>
<option value="1">Unactivated</option>
</select>
<div class="chzn-container chzn-container-single chzn-container-single-nosearch chzn-container-active chzn-with-drop" style="width: 220px;" title="" id="filter_active_chzn"><a class="chzn-single"><span>- Select Active State -</span><div><b></b></div></a>
<div class="chzn-drop">
<div class="chzn-search">
<input type="text" autocomplete="off" readonly="" class="active">
</div>
<ul class="chzn-results">
<li class="active-result result-selected" data-option-array-index="0" style="">- Select Active State -</li>
<li class="active-result" data-option-array-index="1" style="">Activated</li>
<li class="active-result" data-option-array-index="2" style="">Unactivated</li>
</ul>
</div>
</div>
</div>
我需要从下拉列表中选择选项。这是我的脚本:
Select sc = new Select(driver.findElement(By.id("filter_active")));
sc.selectByVisibleText("Activated");
但是,我在控制台中收到此错误:
Element is not currently visible and may not be manipulated
有人可以让我知道如何解决此问题。
答案 0 :(得分:3)
在您发布的HTML中,SELECT
被隐藏,因为其中包含style="display: none;"
。看起来<ul class="chzn-results">
和子LI
是可见的“下拉列表”,而隐藏的SELECT
则保留了选择后的值。
在这种情况下,您不能使用Select()
类。您将需要单击可见的下拉元素(无法分辨是什么……也许是INPUT
?),然后使用常规的Selenium方法单击所需的LI
。
类似的事情应该起作用...
driver.findElement(By.cssSelector("div.chzn-search > input")).click();
driver.findElement(By.xpath("//ul[@class='chzn-results']/li[.='Activated']")).click();
答案 1 :(得分:0)
要对click()
上的文本为已激活的选项进行操作,因为<select>
标签的属性为style="display: none;"
,则需要使用从<li>
标签,您可以使用以下任何Locator Strategies:
cssSelector
:
driver.findElement(By.cssSelector("div.chzn-drop ul.chzn-results li.result-selected")).click();
driver.findElement(By.cssSelector("div.chzn-drop ul.chzn-results li.active-result[data-option-array-index='1']")).click();
xpath
:
driver.findElement(By.xpath("//div[@class='chzn-drop']//ul[@class='chzn-results']//li[contains(@class, 'result-selected')]")).click();
driver.findElement(By.xpath("//div[@class='chzn-drop']//ul[@class='chzn-results']//li[contains(@class, 'active-result') and @data-option-array-index='1']")).click();