Javascript WebDriver下拉菜单赢得';Don’不要开门

Javascript WebDriver下拉菜单赢得';Don’不要开门,javascript,java,selenium,webdriver,automated-tests,Javascript,Java,Selenium,Webdriver,Automated Tests,我正在使用Selenium/Java,有一个引发事件的下拉框的有趣问题。。。我无法使用Select,因为下拉列表使用的是有组织的列表,而不是Select and选项(当框关闭时): 及 甚至 jse.executeScript("$(arguments[0]).blur()", element); 在我点击下拉框之前和之后,但那个小傻瓜就是不会一直打开!当我将参数值打印到控制台System.out.println(jse.executeScript($(参数[0])时,参数为空…我不确

我正在使用Selenium/Java,有一个引发事件的下拉框的有趣问题。。。我无法使用
Select
,因为下拉列表使用的是有组织的列表,而不是Select and选项(当框关闭时):

甚至

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

在我点击下拉框之前和之后,但那个小傻瓜就是不会一直打开!当我将参数值打印到控制台
System.out.println(jse.executeScript($(参数[0])时
,参数为空…我不确定这是什么意思。

如果单击下拉列表时不更改类,则单击该下拉列表后,它将消失。请尝试使下拉列表始终显示,并添加一个在单击时消失的类,称为“隐藏”或“移除显示””“是这样吗

然后将其放入html元素中

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

我的意思是,这些只是一些5分钟的建议,显然有一种方法可以写得更好,但我并没有把它们记在脑子里,但你可以很容易地找到如何做所有这些事情。

我非常感谢大家的贡献,但我从来没有真正找到发生这种情况的原因。所以,我尝试了一种欺骗

我把它全部放在一个try/catch块中,这似乎会使它慢到足以处理事件的速度。当然,catch是无用的,因为它永远不会到达,但它是有效的


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

也有类似的问题,并通过将光标移动到下拉菜单来解决

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

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

谢谢@Raults!但我应该声明,我只是在网站上执行功能测试……我没有编写它,我也没有能力更改HTML。我唯一能做的就是通过Selenium和Java与它交互(可能还有一些通过JavascriptExecutor编写的JS脚本)。不过,我非常感谢您的帮助!啊,是的,selenium,这确实起到了作用。您需要搞乱处理下拉列表的实际功能。将您的测试视为实际用户有时会起作用,但在计时和异步方面会出现很多问题。测试javascript是否工作与实际情况一样好几乎在每种情况下都会单击下拉列表。@Raults不,这是不一样的,在代码中的单击操作不如在几乎每种情况下实际单击下拉列表。在与前端的用户交互中可能有几个用例需要类似于用户的交互,否则100%经过单元测试的代码将是无错误的代码,这是不可能的情况并非如此,:)我想说的是,很少有情况下,测试实际点击比测试事情的时间安排对你更有好处,在大多数情况下,这是没有必要的。我的意思是,这也取决于你使用的是什么,django,polymer,ruby,angular2,w/e,但如果没有人解释它的确切原因,我会很难推销它erior.同样的行为是否也会手动发生?如果悬停在上面,它会保持打开状态吗?为什么不使用JS本身来单击它?不。手动,你单击它,它会保持打开状态。我不能在自动化中悬停在它上,因为一旦下一行执行,菜单就会消失。执行JS单击具有相同的效果,就像使用Actions类一样d移动到元素,然后执行操作。您可以欺骗并尝试使用下拉元素的sendKeys吗?
    jse.executeScript("$(arguments[0]).blur()", element);
hide { display:none }
<htmlElement class="alwaysShowThis hide"></htmlElement>
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
  }
}
public void hover(WebElement element) {
    Actions builder = new Actions(driver());
    builder.moveToElement(element).perform();
}