selenium-webdriver通过ie10上的move_to_element触发悬停

时间:2015-04-14 19:41:18

标签: selenium-webdriver internet-explorer-10 remotewebdriver

我正在使用远程webdriver来测试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浏览器并在手动测试中移动鼠标,表单会正确扩展,所以看起来这是删除webdriver不会触发输入的“模糊”或“鼠标悬停”形式行动div。

有没有办法可以更改我的webdriver测试代码或我的网站,以便使用ie10工作?

1 个答案:

答案 0 :(得分:0)

当我在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()