WebDriver下拉菜单不会保持打开状态

时间:2018-08-03 16:25:02

标签: javascript java selenium webdriver automated-tests

我正在使用Selenium / Java,并且存在一个引发事件的DropDown Box有趣的问题...我不能使用Select,因为该下拉列表使用的是有组织的列表,而不是select和option (当框关闭时):

    <section id="..." class="ember-view">
     <ol id="...">
       <li id="...">

我成功单击了下拉框:element.click(); 下拉框打开!但是,当下一行执行时(它只是System.out.println("...");),它将再次关闭并重新备份。

我很困惑。我尝试过

JavascriptExecutor jse = (JavascriptExecutor)driver
jse.executeScript("$(arguments[0]).change()", element);

    jse.executeScript("$(arguments[0]).focus()", element);

甚至

    jse.executeScript("$(arguments[0]).blur()", element);

在单击下拉框之前和之后,但是那个小吸盘不会保持打开状态!当我将参数的值打印到控制台System.out.println(jse.executeScript("$(arguments[0]));时,参数为null ...我不确定这是什么意思。

3 个答案:

答案 0 :(得分:0)

如果您在单击下拉列表时未更改类,则将单击它,单击几乎将消失。尝试使之始终显示下拉菜单,并添加一个单击后消失的类,称为“隐藏”或“ removeDisplay”,就像这样

hide { display:none }

,然后将其放在html元素中。

<htmlElement class="alwaysShowThis hide"></htmlElement>

请确保在单击它时删除hide类,然后可以在其上放置一个计时器,或者只是检测将鼠标悬停在其上。

javascript可能如下所示:

display(event) {
  if(/*checkfor hide class existing*/){
     //remove hide class
  }
}
hide() {
  if(alwaysShowThis or its id is not being hovered over){
     //add hide class to its classes
  }
}

我的意思是,这些只是5分钟的建议,很显然,有一种方法可以更好地编写这些建议,但是我并没有把它们放在脑海中,但是您可以找到如何轻松地完成所有这些事情的方法。

答案 1 :(得分:0)

我非常感谢大家的贡献,但是我从未真正发现这种情况的原因。因此,我改为尝试作弊...

我将其全部放入try / catch块中,这似乎使其速度降低到足以处理事件的程度。当然,该捕获是没有用的,因为它永远不会达到,但是可以工作。

我知道这完全是骇客。我仍然有兴趣寻找这种行为的原因,但在那之前,我们继续!

答案 2 :(得分:0)

遇到了类似的问题,通过将光标移动到下拉列表来解决。

public void hover(WebElement element) {
    Actions builder = new Actions(driver());
    builder.moveToElement(element).perform();
}

之后它保持打开状态,我可以点击我的选择。