0

我正在使用远程 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 没有触发输入的“模糊”或表单操作上的“悬停”分区。

有没有办法可以更改我的 webdriver 测试代码或我的网站以使其与 ie10 一起使用?

4

1 回答 1

0

当我在 IE(在我的情况下为 IE11)上运行测试时,使用此代码悬停(本地)工作正常

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

当我在 Saucelabs 上运行它时,没有运气。我终于用 javascript 实现了(使用我在这里找到的代码)。我最终这样做了

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()          
于 2015-08-06T23:07:29.030 回答