【发布时间】:2017-12-15 04:16:19
【问题描述】:
我的智慧到此为止。我假设我做错了什么,但我无法在我的一生中弄清楚是什么。
我有一个导航栏,我试图将鼠标悬停在主元素上,这会导致下拉菜单展开,然后单击 IEx86 中的子元素。这看起来很简单,对吧?
HTML(通用):
<nav class="navHeader">
<ul class="topNavigation">
<li class="firstItem"><a href="/Home">Home</a></li>
<li class="current"><a href="javascript:void(0)">Transactions</a>
<ul style="display: block;">
<li class=""><a class="tabbedTransactions" href="/Transaction/#li1">li1</a></li>
<li class=""><a class="tabbedTransactions" href="/Transaction/#li2">li2</a></li>
<li class=""><a class="tabbedTransactions" href="/Transaction/#li3">li3</a></li>
<li class=""><a class="tabbedTransactions" href="/Transaction/#li4">li4</a></li>
<li class=""><a class="tabbedTransactions" href="/Transaction/#li5">li5</a></li>
<li class="current bottomSubNav"><a href="/li6/" class="current bottomSubNav">li6</a></li>
</ul>
</li>
</ul>
</nav>
我认为会起作用(如果我在代码运行时将 ACTUAL 光标悬停在 Transaction 元素上会起作用)(WebElements 都是通过 xpath 找到并传入的,xpath 已使用验证一个插件)(驱动程序是 WebDriver 和类的公共部分)
public void HoverClick(WebElement hover, WebElement click)
{
Actions actions = new Actions(driver);
actions.moveToElement(hover).click(click).build().perform();
}
.moveToElement 似乎没有移动到,因此无法点击。 (甚至没有闪烁的导航栏项目扩展)
public void HoverClick(WebElement hover, WebElement click)
{
Actions actions = new Actions(driver);
actions.moveToElement(hover).build().perform();
actions.click(click).build().perform();
}
有了这个,moveToElement 移动到(导航栏扩展)但.click(click) 失败。离开 moveToElement 的 .perform() 不会导致行为发生任何变化。
public void HoverClick(WebElement hover, WebElement click)
{
Actions actions = new Actions(driver);
actions.moveToElement(hover).build().perform();
actions.pause(Duration.ofMillis(1000)).build().perform();
actions.click(click).build().perform();
}
有了这个,.pause() 第一次是 .build().perform()-ed 有一个暂停。第二次(.click().build().perform())没有暂停。
我不知道从这里做什么。如前所述,如果我将鼠标悬停在 nav 元素上,则代码执行得很好。请帮忙?
【问题讨论】:
-
我通常使用
Actions进行悬停,但只使用普通的element.click()。你试过吗?您是否尝试过在悬停之前添加等待?您是否确信它在代码运行时存在并且可以悬停?确认这一点的一种方法是在调用HoverClick()之前放置一个断点。一旦它中断,一次单步执行一行代码,看看它是否有效。 -
听从您的建议,它看起来像以下工作:
actions.moveToElement(hover).perform();click.click();为什么会起作用,.build().perform()不会让我感到困惑。 -
好吧,有一些警告。请查看我的“答案”和相关评论?请? :)
标签: java selenium internet-explorer