Selenium:尝试在下拉列表中选择选项时,元素不可见?

时间:2015-07-20 06:32:41

标签: selenium selenium-webdriver

如何在下拉菜单中选择项目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:元素不是   目前可见,因此可能无法与

进行交互

我希望有人可以指出我的错误,这将使这一切变得更好。

4 个答案:

答案 0 :(得分:2)

你已经做得很好,

BUT

问题在于您的style-display属性设置为“none”

style="padding: 0px; display: none;"

没有任何显示表示Selenium没有任何“可见”,因此您获得了ElementNotVisibleException。

你可以尝试什么

1)

从你的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>

然后你需要使用这些其他元素。我看到这种选择元素从未多次改变它们的显示属性。

2)

下拉菜单附近有“按钮”吗?或者你可以点击下拉菜单吗?如果是,请检查显示属性是否更改。 如果它确实更改为“阻止”或类似,则只需在尝试查找选项之前单击下拉元素。

答案 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”);

试试这个