selenium-webdriver 在 ie10 上通过 move_to_element 触发悬停问题

selenium-webdriver issues triggering hover via move_to_element on ie10

我正在使用远程网络驱动程序来测试 SauceLabs 上的不同配置。我的其中一个页面有一个 ajax 函数,可以加载扩展表单部分。加载由特定表单元素的模糊触发,或者如果有人将鼠标悬停在 .form-actions div 上。我正在尝试通过 webdriver 重新创建此行为。

以下行为在 ie9 和 chrome 上符合预期(加载表单的第二部分),但在 ie10 上停止工作:

    nxt_btn = self.sel.find_element_by_css_selector(
        NEXT_BTN_SELECTOR)
    ActionChains(self.sel).move_to_element(nxt_btn).perform()
    self.wait_until_visible('input[name="next_to_load"]')

如果我调出 ie10 浏览器并在手动测试中移动鼠标,表单会正确扩展,所以似乎是 remove webdriver 没有触发输入的 'blur' 或 'hover' 在表单操作 div 上。

有什么方法可以更改我的 webdriver 测试代码或我的站点以使其适用于 ie10?

当我 运行 在 IE 上测试时(在我的例子中是 IE11),悬停在这个代码下工作正常(本地)

hover = ActionChains(self.browser).move_to_element(elem)                   
hover.perform() 

当我在 Saucelabs 上 运行 时,运气不好。我终于在 javascript 中实现了(使用我找到的代码 here)。我最终这样做了

def hover_over(self, params):                                                
    if self.driver.desired_capabilities['browserName'] in ['safari', 'internet explorer']:
        print "Javascript Hovering over = " + params['menu']                
        self.js_hover_over(params )                                        
    else:                                                                   
        print "Std Hovering over = " + params['menu']                       
        self.std_hover_over(params)                                       


def js_hover_over(self, params):                                          
    js_script = ''.join(["var elem = document.getElementById('",            
        params['menu'],                                                        
        "');",                                                              
        "if (document.createEvent) {",                                      
        "var evObj = document.createEvent('MouseEvents');",                    
        "evObj.initEvent('mouseover', true, false);",                        
        "elem.dispatchEvent(evObj);",                                          
        "} else if (document.createEventObject) {",                        
        "elem.fireEvent('onmouseover');",                                      
        "}"])                                                               
    self.driver.execute_script(js_script)                                   

def std_hover_over(self, params):                                            
    elem =self.driver.find_element_by_id(params['menu'])                       
    hover = ActionChains(self.browser).move_to_element(elem)                   
    hover.perform()