我正在使用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 ...我不确定这是什么意思。
答案 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();
}
之后它保持打开状态,我可以点击我的选择。