Selenium webdriver 量角器:在IE上测试ui引导工具提示

Selenium webdriver 量角器:在IE上测试ui引导工具提示,selenium-webdriver,webdriver,protractor,angular-ui-bootstrap,Selenium Webdriver,Webdriver,Protractor,Angular Ui Bootstrap,使用量角器测试工具提示(使用ui引导指令)是否显示,我发现如果显示工具提示有延迟,则当鼠标在应触发工具提示的元素上移动时,IE会被卡住 HTML <div id="trigger" tooltip-popup-delay="500" tooltip="Tooltip content...">Lorem ipsum</div> 删除tooltip popup delay属性会使测试通过,如果我是对的,这是因为IE WebDriver“通过在鼠标光标移动到的最后一个位置连续

使用量角器测试工具提示(使用ui引导指令)是否显示,我发现如果显示工具提示有延迟,则当鼠标在应触发工具提示的元素上移动时,IE会被卡住

HTML

<div id="trigger" tooltip-popup-delay="500" tooltip="Tooltip content...">Lorem ipsum</div>
删除tooltip popup delay属性会使测试通过,如果我是对的,这是因为IE WebDriver“通过在鼠标光标移动到的最后一个位置连续触发鼠标悬停事件”来实现悬停(请参阅EnablePersistentOver选项说明)然后,量角器将永远等待,因为每次鼠标悬停都会触发$timeout

在Chrome/Firefox上进行测试时,每一项功能都很好

我的问题是:
是否有一种方法可以使用量角器/IE WebDriver进行正确的悬停,即使工具提示出现延迟,也可以使此测试通过?

这仍然是一个猜测,但请尝试滚动到元素视图中:

var elm = element(by.id('trigger'));
browser.executeScript("arguments[0].scrollIntoView();", elm.getWebElement());

browser.driver.actions().mouseMove(elm).perform();
请注意,作为一种解决方法,您可以动态删除
工具提示弹出延迟
属性:

browser.executeScript("arguments[0].removeAttribute('tooltip-popup-delay');", elm.getWebElement());

不幸的是@alecxe的建议对我不起作用。 几个小时后,我试图通过手动触发鼠标悬停事件来解决这个问题,但实际上并不像看上去那么容易。 我写过这样的东西:

browser.executeScript("
  var event = document.createEvent('MouseEvent');
  event.initMouseEvent('mouseover',true,true,window,0,0,0,0,0,false,false,false,false,0,null);
  arguments[0].dispatchEvent(event);", elm.getWebElement()
)
browser.wait(protractor.ExpectedConditions.presenceOf(elm), tooltipDelay);
browser.actions().mouseMove(elm, {x:5, y:5}).perform()
第一部分为悬停触发IE事件,在量角器等待元素出现后,在触发普通量角器悬停后-否则可能会出现问题,工具提示将永远不会出现。 偏移量5px用于将光标放在元素的中间,不确定是否需要其他情况。

这不是一个解决方案,但可能有人可以在与IE的斗争中利用它作为动力来源

browser.executeScript("
  var event = document.createEvent('MouseEvent');
  event.initMouseEvent('mouseover',true,true,window,0,0,0,0,0,false,false,false,false,0,null);
  arguments[0].dispatchEvent(event);", elm.getWebElement()
)
browser.wait(protractor.ExpectedConditions.presenceOf(elm), tooltipDelay);
browser.actions().mouseMove(elm, {x:5, y:5}).perform()