Javascript 赛普拉斯';“不要执行”命令;“显示”;隐藏元素交互方法

Javascript 赛普拉斯';“不要执行”命令;“显示”;隐藏元素交互方法,javascript,jquery,typescript,automation,cypress,Javascript,Jquery,Typescript,Automation,Cypress,我有一种情况,我想打开主菜单的子菜单,它使用嵌套的“ulli”构建布局 当鼠标悬停在具有子项(ul li)的li上时,子菜单打开,如下所示 <ul class="dropdown"> <li>/<li> <li>/<li> <li class="dropdown-menu"> <a> Target Menu </a> <ul class="dropdown"

我有一种情况,我想打开主菜单的子菜单,它使用嵌套的“ulli”构建布局

当鼠标悬停在具有子项(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>
  • /
  • /
  • 我也尝试了下面的命令,但也失败了。不会出现任何悬停或鼠标悬停效果,并且在尝试单击“隐藏Li(子菜单1/2/3)”时,自动操作会因此中断

    cy.get(“瞄准li/a”)。触发器(“鼠标悬停”)

    我在搜索一个博客时发现,要与鼠标悬停在某个按钮或链接上时可见的隐藏元素交互,必须使用下面的cy.invoke,它将执行jquery“show”事件并使隐藏元素可见,然后可以单击隐藏元素。不幸的是,当我编写下面的命令时,该方法也不能像Typescript那样工作,它不允许我编译,因为“show”不是有效的函数名

    cy.get(“li.dropdown-menu ul.dropdown”).invoke(“show”)

    请提供与此相关的可能解决方案指南。
    使用隐藏元素的{force:true}执行click命令是解决此问题的方法,但不是有效的方法。

    根据注释,您的问题似乎是如何在引导中处理菜单

    引导菜单可以通过添加到jQuery的特殊
    .dropdown()
    函数触发。由于Cypress为您提供了对DOM的本机访问,因此您可以从测试中调用该函数。以下是在Cypress中的外观:

    cy.get('li.dropdown-menu a').then((elem) => {
        $(elem).dropdown('toggle');
    });
    
    朋友

    首先,谢谢你的时间和建议

    我已经找到了触发鼠标悬停事件并显示引导子菜单的方法。不使用{force:true}

    我实现的解决方案。如果有人找到不同的更好的解决方案,我们将不胜感激。请分享

    Cypress.$($elem[0]).siblings("ul").show();
    
    使用这个,我手动使ul首先显示,然后执行子菜单的点击事件。 为此我已经试过了

    Cypress.$($elem[0]).hover(false, false);
    Cypress.$($elem[0]).mouseover();
    Cypress.$($elem[0]).trigger("hover");
    Cypress.$($elem[0]).trigger("mouseover");
    

    但是上面的命令不起作用。因此,我开始手动触发jquery的隐藏/显示事件

    隐藏元素不会通过调用('show')显示,因为您正在使用隐藏元素的父级定位器。尝试使用隐藏元素的直接父元素。然后invoke('show')将执行鼠标悬停功能。

    如果您不喜欢使用
    force:true
    ,另一种可能的解决方法是使用
    将本机或基于jquery的悬停触发器排入队列。然后()
    。如果我遗漏了一些内容,请道歉,但是
    cy.get(“瞄准li/a”)
    看起来不正确。我会使用
    cy.get('a').content('Target Menu').trigger('mouseover')
    @eric99我相信他们是说
    “Target the li/a”
    将被替换为实际针对元素的选择器。啊,是的,这有点愚蠢-问题可能在选择器中。即将获得一个
    最小、完整且可验证的示例
    票证。在javascript或CSS中显示和隐藏菜单选项的逻辑是什么?你能在菜单上发布实际处理鼠标事件的代码吗?我刚刚为我的项目实现了一个测试,它使用了
    .trigger('mouseover')
    ,但是如果你处理这些事件的应用程序代码不同,那么同样的事情可能不起作用。你尝试过我发布的解决方案吗?是的,但它不起作用。下面,命令使用Cypress.$($elem[0]).sides(“ul”).show();