【发布时间】:2018-12-24 18:51:55
【问题描述】:
我有一种情况,我想打开使用嵌套“ul-li”构建布局的主菜单的子菜单。
当鼠标悬停在具有以下子项 (ul-li) 的 li 时,子菜单打开
<ul class="dropdown">
<li>/<li>
<li>/<li>
<li class="dropdown-menu">
<a> Target Menu </a>
<ul class="dropdown">
<li class="dropdown-sub-menu"><a> Sub Menu 1</a></li>
<li class="dropdown-sub-menu"><a> Sub Menu 2</a></li>
<li class="dropdown-sub-menu"> <a> Sub Menu 3</a></li>
</ul>
</<li>
</ul>
在这里,我的要求是将鼠标悬停在“目标菜单”上,它将打开其子菜单,然后分别触发“子菜单1/2/3”的点击事件。
我已经阅读了 cypress 处理此功能的文档。由于 .hover() 功能不适用于 cypress。
https://docs.cypress.io/api/commands/hover.html# https://docs.cypress.io/api/commands/trigger.html#Syntax https://docs.cypress.io/guides/core-concepts/interacting-with-elements.html#Actionability
我也尝试了以下命令,但也失败了。没有发生悬停或鼠标悬停效果,因此当它尝试单击“隐藏的 Li(子菜单 1/2/3)”时会中断自动化。
cy.get("target the li/a").trigger("mouseover")
其中一个博客在搜索时发现,要与在某些按钮或链接上的鼠标悬停效果上可见的隐藏元素进行交互,您必须使用下面的 cy.invoke 来执行 jquery“show”事件和使隐藏元素可见,然后您可以单击隐藏元素。不幸的是,当我编写以下命令时,该方法也无法像在 Typescript 中那样工作,它不允许我编译,因为“show”不是有效的函数名。
cy.get("li.dropdown-menu ul.dropdown").invoke("show")
请指导与此相关的可能解决方案。 使用隐藏元素的 { force: true } 执行点击命令是解决此问题的方法,但不是有效的。
【问题讨论】:
-
如果您不喜欢使用
force: true,另一种可能的解决方法是使用.then()将本机或基于jquery 的悬停触发器排队。 -
对不起,如果我遗漏了什么,但
cy.get("target the li/a")看起来不正确。我会使用cy.get('a').content(' Target Menu ').trigger('mouseover')。 -
@eric99 我相信他们是在说
"target the li/a"将被替换为实际针对该元素的选择器。 -
啊,是的,这有点愚蠢——问题可能出在选择器上。航行接近获得
minimal, complete and verifiable example票。 -
在 javascript 或 CSS 中显示和隐藏菜单选项的逻辑是什么?您能否在菜单上发布实际处理鼠标事件的代码?我刚刚为我的项目实施了一个使用
.trigger('mouseover')的测试,但如果您处理这些事件的应用代码不同,那么同样的事情可能无法正常工作。
标签: javascript jquery typescript automation cypress