【问题标题】:protractor browser.actions().mouseMove() not showing hover effects量角器 browser.actions().mouseMove() 不显示悬停效果
【发布时间】:2016-07-13 21:18:41
【问题描述】:

我是量角器的新手,我正在尝试为默认关闭的滑块面板添加​​测试,将鼠标悬停将打开它,然后滑块面板上有一个项目列表可供选择。

<div class="slider" [ngClass]="{ closed: state === 1, open: state === 2}" (click)="onClick($event)" (mouseover)="onMouseOver($event)" (mouseleave)="onMouseLeave($event)">

我尝试了多种方法,它们都不起作用。

第一次尝试:(没有悬停效果,即什么也不做)

browser.actions().mouseMove(element(by.css('.slider.closed'))).perform();

第二次尝试:(收到错误:指定了无效或非法的选择器)

browser.actions().mouseMove(element(by.css('[(mouseover)="onMouseOver($event)"]'))).perform();

第三次尝试:(出现错误:使用定位器未找到元素)

browser.actions().mouseMove(element(by.css('[mouseover="onMouseOver($event)"]'))).perform();

【问题讨论】:

    标签: protractor mouseover


    【解决方案1】:

    我也遇到了同样的问题,2 小时后,我发现这项工作适合我:

    源代码:java mouse over using javascript

     let loginElement = await driver.findElement(By.id('header-user'));
        let strJavaScript = "var element = arguments[0];"
        + "var mouseEventObj = document.createEvent('MouseEvents');"
        + "mouseEventObj.initEvent( 'mouseover', true, true );"
        + "element.dispatchEvent(mouseEventObj);";
        await driver.executeScript(strJavaScript, loginElement);
    

    【讨论】:

      【解决方案2】:

      我在使用 firefox 运行测试时遇到了同样的问题 并找出如下解决方案

      if (browser.isFirefox) {
       var script = `if(document.createEvent) {
            var evObj = document.createEvent('MouseEvents');
            evObj.initEvent('mouseover', true, false);
            arguments[0].dispatchEvent(evObj); 
          } else if (document.createEventObject) { 
            arguments[0].fireEvent('onmouseover'); 
          }`;
        browser.executeScript(script, elm.getWebElement());
        return elm.click();
      } else {
      return browser.actions()
        .mouseMove(elm.getWebElement())
        .click()
        .perform();
      }
      

      测试: 量角器:5.1.1 硒:3.4.0

      【讨论】:

        【解决方案3】:

        我使用了 webdriver 并使它工作。 browser.executeScript('arguments[0].click()',browser.driver.findElement(By.css('.slider')));

        【讨论】:

        • mouseHover 是如何工作的?这是一个点击的东西,首先我们要把鼠标移到上面
        【解决方案4】:

        这应该可以工作,除非您有多个具有 .slider 类的元素。此时,您可能会尝试包含父对象或其他定位器策略。

        browser.actions().mouseMove($('.slider')).perform();
        

        【讨论】:

        • 还是不行。我正在使用 chrome 浏览器(版本 48.0.2564.82 m)。我觉得可以定位元素,只是没有悬停效果,就是slider没有打开。我需要先打开滑块,然后单击滑块面板中的项目。或者您认为我可以通过其他方式单击面板中的项目。
        • 嗨,Brine,感谢您的回答。我认为它应该可以工作,但它不适用于我的特定小部件。我不确定为什么。我确实解决了问题并使它起作用。 browser.executeScript('arguments[0].click()', browser.driver.findElement(By.css('.slider')));
        猜你喜欢
        • 2020-03-15
        • 2016-04-26
        • 1970-01-01
        • 2021-07-03
        • 2019-01-20
        • 2023-04-02
        • 1970-01-01
        • 2021-06-02
        • 1970-01-01
        相关资源
        最近更新 更多