2014-10-01 84 views
0

我在运行不同浏览器中的脚本时遇到问题:我的脚本在Chrome,Firefox中可以正常工作,但IE和PhantomJS存在问题。最让人好奇的是,前几天我成功完成了PhantomJS中的相同脚本,我确信没有人会改变宝石/浏览器。 这里是我要执行的脚本:Watir无法在IE和PhantomJS中找到元素

class HomePage 
    .... 
    link(:signInLink, :text=>"Sign In") 
    .... 
def log_in(username="admin", password="admin123") 
    self.signInLink_element.when_present(60).click//hangs here 
    self.login_element.when_present(60) 
    self.username = username 
    self.password = password 
    self.signIn_element.click 
end 

这个页面的HTML代码:

<div class="user-display"> 
<span class="user-actions"> 
    <a rel="nofollow" href="/RedisCache/Users/Account/LogOn?ReturnUrl=%2FRedisCache%2F"> 
     Sign In 
    </a> 
</span> 
</div> 

通过黄瓜运行我的剧本我已经GOR下一个异常(PhantomJS):

timed out after 60 seconds, waiting for {:text=>"Sign In", :tag_name=>"a"} to become present(Watir::Wait::TimeoutError) 

当我试图重现这种情况“手工”使用irb我已经得到下一个例外尝试点击登录链接(PhantomJS):

Selenium::WebDriver::Error::ElementNotVisibleError: Error Message => 'Element is not currently visible and may not be manipulated' 
caused by Request => {"headers":{"Accept":"application/json","Connection":"close","Content-Length":"2","Content-Type":"application/x-www-form-urlencoded","Host":"127.0.0.1:8910","User-Agent":"Ruby"},"httpVersion":"1.1","method":"POST","post":"{}","postRaw":"{}","url":"/click","urlParsed":{"anchor":"","query":"","file":"click","directory":"/","path":"/click","relative":"/click","port":"","host":"","password":"","user":"","userInfo":"","authority":"","protocol":"","source":"/click","queryKey":{},"chunks":["click"]},"urlOriginal":"/session/ed325840-496d-11e4-9570-2d0549eccb44/element/%3Awdc%3A1412169736003/click"} (ReqHand) 
    from C:/Ruby193/lib/ruby/gems/1.9.1/gems/selenium-webdriver-2.43.0/lib/selenium/webdriver/remote/response.rb:52:in `assert_ok' 
    from C:/Ruby193/lib/ruby/gems/1.9.1/gems/selenium-webdriver-2.43.0/lib/selenium/webdriver/remote/response.rb:15:in `initialize' 
    from C:/Ruby193/lib/ruby/gems/1.9.1/gems/selenium-webdriver-2.43.0/lib/selenium/webdriver/remote/http/common.rb:59:in `new' 
    from C:/Ruby193/lib/ruby/gems/1.9.1/gems/selenium-webdriver-2.43.0/lib/selenium/webdriver/remote/http/common.rb:59:in `create_response' 
    from C:/Ruby193/lib/ruby/gems/1.9.1/gems/selenium-webdriver-2.43.0/lib/selenium/webdriver/remote/http/default.rb:66:in `request' 
    from C:/Ruby193/lib/ruby/gems/1.9.1/gems/selenium-webdriver-2.43.0/lib/selenium/webdriver/remote/http/common.rb:40:in `call' 
    from C:/Ruby193/lib/ruby/gems/1.9.1/gems/selenium-webdriver-2.43.0/lib/selenium/webdriver/remote/bridge.rb:638:in `raw_execute' 
    from C:/Ruby193/lib/ruby/gems/1.9.1/gems/selenium-webdriver-2.43.0/lib/selenium/webdriver/remote/bridge.rb:616:in `execute' 
    from C:/Ruby193/lib/ruby/gems/1.9.1/gems/selenium-webdriver-2.43.0/lib/selenium/webdriver/remote/bridge.rb:373:in `clickElement' 
    from C:/Ruby193/lib/ruby/gems/1.9.1/gems/selenium-webdriver-2.43.0/lib/selenium/webdriver/common/element.rb:54:in `click' 
    from C:/Ruby193/lib/ruby/gems/1.9.1/gems/watir-webdriver-0.6.11/lib/watir-webdriver/elements/element.rb:132:in `click' 

当我在IE浏览器中运行脚本时,它会挂起我是在运行黄瓜还是试图单击“手动”链接。正如我可以看到链接闪烁,就像它失去/接收焦点,这就是全部。 我试图降级PhantomJS版本并重新安装它,但没有任何帮助。 有什么建议吗? IE版本是9.0.8112 PhantomJS版本是1.9.7.0 所有宝石都有最新版本。

+0

WW并不是一个真正的跨浏览器解决方案。 您应该牢记这一点: http://watirmelon.com/2014/03/13/do-you-really-need-to-run-your-webdriver-tests-in-ie/ – 2014-10-13 15:56:53

+0

As Alister在他的文章中说:“但是,作为一名顾问,我不断听到管理人员说我们必须在Internet Explorer中运行我们的WebDriver自动化测试。” - 这也是我的问题:)但经过几次艰难的谈话,我们终于决定只在IE中运行小场景。从技术角度来看:正如约翰逊所建议的那样,我已经改变了元素的选择器并使其有效。所以我接受他的回答。 – Smooyk 2014-10-14 05:08:08

回答

1

我在过去遇到过以下问题:文本选择器和IEDriver。对我来说这是超级挑剔的,有时会传球,有时会失败。我会切换到其中一个:

link(:SignInLink, href: "/RedisCache/Users/Account/LogOn?ReturnUrl=%2FRedisCache%2F") 

link(:SignInLink, xpath: "//span[@class='user-actions']/a[contains(@href,'Users/Account/LogOn')]") 
+1

phantomjs的问题已解决:这是我们的主页面调整大小的问题(因为phantomjs窗口的开始大小Sign In lnk不在视图中)。解决方案:在开始时调整phantomjs窗口的某个适当的值。至于第二个问题(使用IE浏览器),我仍然在寻找解决方案。选择器的改变还没有解决问题。但是,谢谢你的提议。 – Smooyk 2014-10-02 07:21:16