如何在下拉菜单中选择项目Option 3
,如下所示?
<span class="k-widget k-dropdown k-header form-control required" style="padding: 0px;" unselectable="on" role="listbox" aria-haspopup="true" aria-expanded="true" tabindex="0" aria-owns="assignee_listbox" aria-disabled="false" aria-readonly="false" aria-busy="false" aria-activedescendant="assignee_option_selected">
<span class="k-dropdown-wrap k-state-default" unselectable="on">
<select id="assignee" class="form-control required" style="padding: 0px; display: none;" name="assignedUserId" data-role="dropdownlist" title="">
<option value="28941">Option 1</option>
<option value="28938">Option 2</option>
<option value="28940">Option 3</option>
<option value="28942">Option 4</option>
<option value="28943" selected="selected">Option 5</option>
<option value="28939">Option 6</option>
</select>
</span>
</span>
我尝试在下拉列表中选择选项3,下面是我的代码:
public Page selectAsignee(String asignee){
try{
WebElement dropdownAsignee = connector.waitForControl(SBConstant.XPATH,dropdownAssignee,3);
// My xPath is //select[@id='assignee']
Select select = new Select(dropdownAsignee);
select.selectByVisibleText("Option 3");
return this;
}catch (StaleElementReferenceException s){
s.toString();
}
return this;
}
但它无法选择选项3,尽管网络驱动程序可以检测id =“assignee”的选择。 运行此代码后,它会抛出这样的错误:
org.openqa.selenium.ElementNotVisibleException:元素不是 目前可见,因此可能无法与
进行交互
我希望有人可以指出我的错误,这将使这一切变得更好。
答案 0 :(得分:2)
你已经做得很好,
BUT
问题在于您的style-display属性设置为“none”
style="padding: 0px; display: none;"
没有任何显示表示Selenium没有任何“可见”,因此您获得了ElementNotVisibleException。
从你的span元素(k-dropdown,k-dropdown-wrap等)的类中讲述,下拉列表可能被其他元素“操作”。如果您发现div或列表元素也包含有关选项的信息,则可以检查您的站点。 类似的东西:
<ul class="someClass" someOtherAttributes>
<li>
<a href="someHypertextRef">Option 1</a>
</li>
<li>
<a href="someHypertextRef">Option 2</a>
</li>
<li>
<a href="someHypertextRef">Option 3</a>
</li>
</ul>
然后你需要使用这些其他元素。我看到这种选择元素从未多次改变它们的显示属性。
下拉菜单附近有“按钮”吗?或者你可以点击下拉菜单吗?如果是,请检查显示属性是否更改。 如果它确实更改为“阻止”或类似,则只需在尝试查找选项之前单击下拉元素。
答案 1 :(得分:1)
用这个替换你的代码,我希望它对你有用。 更新:请等待元素可见性,如果任何点击或事件使其可见或通过下面的代码使其可见
<script>
function addNumber(element) {
document.getElementById('child').value = document.getElementById('child').value + element.value;
}
function deleteNumber(){
document.getElementById('child').value='';
}
</script>
<div class='form-group'>
<div id="staticParent">
<div class='col-md-6'>
<input class='form-control' id='child' name="username" type='text' maxlength="5" readonly='readonly' />
<input type="button" class="fbutton" name="1" value="1" id="1" onClick=addNumber(this); />
<input type="button" class="fbutton" name="2" value="2" id="2" onClick=addNumber(this); />
<input type="button" class="fbutton" name="3" value="3" id="3" onClick=addNumber(this); />
<input type="button" class="fbutton" name="4" value="4" id="4" onClick=addNumber(this); />
<input type="button" class="fbutton" name="5" value="5" id="5" onClick=addNumber(this); />
<input type="button" class="fbutton" name="6" value="6" id="6" onClick=addNumber(this); />
<input type="button" class="fbutton" name="7" value="7" id="7" onClick=addNumber(this); />
<input type="button" class="fbutton" name="8" value="8" id="8" onClick=addNumber(this); />
<input type="button" class="fbutton" name="9" value="9" id="9" onClick=addNumber(this); />
<input type="button" class="fbutton" name="0" value="0" id="0" onClick=addNumber(this); />
<input type='button' class='fbutton' name='delete' value='Delete' onClick=deleteNumber(this); />
</div>
</div>
答案 2 :(得分:0)
试试这样:
WebElement element = driver.findElement(By.xpath("//span[@class='kdropdown-wrap k-state-default']/select"));
Select select = new Select(element);
select.selectByVisibleText("Option 3");
答案 3 :(得分:0)
SelectElement select1 = new SelectElement(driver.FindElement(By.TagName(“select”))); select1.SelectByText( “28940”);
试试这个