量角器 browser.actions().mouseMove() 不显示悬停效果
protractor browser.actions().mouseMove() not showing hover effects
我是量角器的新手,我正在尝试为默认关闭的滑块面板添加测试,将鼠标悬停在上面会打开它,然后滑块面板上有一个项目列表可供选择。
<div class="slider" [ngClass]="{ closed: state === 1, open: state === 2}" (click)="onClick($event)" (mouseover)="onMouseOver($event)" (mouseleave)="onMouseLeave($event)">
我尝试了多种方法,none 其中有效。
第一次尝试:(无悬停效果,即什么都不做)
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();
这应该有效,除非您有多个元素 class .slider
。此时,您可能会尝试包含父对象或其他定位器策略。
browser.actions().mouseMove($('.slider')).perform();
我使用了 webdriver 并使它工作。 browser.executeScript('arguments[0].click()',browser.driver.findElement(By.css('.slider')));
我在 运行 使用 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
我只是遇到了同样的问题,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);
我是量角器的新手,我正在尝试为默认关闭的滑块面板添加测试,将鼠标悬停在上面会打开它,然后滑块面板上有一个项目列表可供选择。
<div class="slider" [ngClass]="{ closed: state === 1, open: state === 2}" (click)="onClick($event)" (mouseover)="onMouseOver($event)" (mouseleave)="onMouseLeave($event)">
我尝试了多种方法,none 其中有效。
第一次尝试:(无悬停效果,即什么都不做)
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();
这应该有效,除非您有多个元素 class .slider
。此时,您可能会尝试包含父对象或其他定位器策略。
browser.actions().mouseMove($('.slider')).perform();
我使用了 webdriver 并使它工作。 browser.executeScript('arguments[0].click()',browser.driver.findElement(By.css('.slider')));
我在 运行 使用 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
我只是遇到了同样的问题,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);