2012-02-09 91 views
2

第一周一般会使用watir-webdriver和Web应用程序进行测试,所以仍然试图包装一些概念。watir-webdriver - 点击使用Javascript按钮

有了这个JavaScript元素:

<input type="submit" class="button" value="Search" name="_target0"> 

browser.button(:value, "Search").exists? 
=> "true" 

browser.button(:value, "Pesquisar").present? 
=> true 

browser.button(:name, "_target0").value 
=> "Search" 

这实际上并没有开车去获得点击该按钮,

browser.button(:name, "_target0").click 

所以我就驱动Firefox中使用任何

browser.button(:name, "_target0").fire_event('on_click') 
browser.button(:name, "_target0").when_present.click 
点击按钮

但他们之间有什么不同?

+1

“这行不通”不告诉我们很多。你期望会发生什么?当你尝试'browser.button.present?'会发生什么?' – 2012-02-09 17:47:37

+0

谢谢Željko。试图根据您的建议更好地说明问题。但我唯一的问题是使用.fire_event('on_click')来定义javascript将采取的事件vs。when_present – 2012-02-09 17:54:42

回答

2

至于它们之间的差异:

  • .click =模拟对象上点击鼠标左键。
  • .fire_event =执行一个javascript,甚至可以通过鼠标点击来正常访问。
  • when_present.click =等待对象 都可用,并且在尝试点击之前出现在可见区域(完整浏览器 窗口)中。

when_present适用于您的网站使用AJAX时,与一个对象交互导致另一个对象最终出现。使用.click可能会尝试在第二个对象可用之前单击它,并且该脚本将失败。

这可能是您的网页包含AJAX的形式,和您试图用没有立即加载交互的按钮,但是当一个短暂的延迟后:

  • 输入文本字段
  • 另一个按钮被点击
  • 页面完成生成内容

由于fire_eve nt不查找按钮的物理表示,而是查看源中的JS事件,可以在按钮存在/可见/可操作之前使用它。

+0

啊,我明白了,谢谢Adam。那么预计browser.button(:value,“Search”)是否存在?和browser.button(:value,“Pesquisar”)。present?返回true虽然按钮仍然不可用? – 2012-02-09 18:07:37

+1

如果存在?返回true,该按钮位于DOM中。如果存在?返回true,该按钮是可见的并且可用。在这种情况下,点击应该工作,但是,我遇到了一个问题,该按钮仍然不可用。 我通过使用包含我的定位器中的按钮的DIV解决了此问题。我无法解释为什么,但以这种特定方式访问按钮导致了我的问题:browser.div(:name,/testing/).button(:value,“Search”)。点击 – 2012-02-09 18:20:36

+0

Curious Joao - 做了这个在评论(使用div)的方法为你工作?或者您是否继续使用以前的解决方案之一? – 2012-02-10 18:37:33

1

您可以检查运行测试的浏览器的缩放级别吗?

我遇到的点击方法同样的问题,但我可以通过设置我的浏览器(IE9)恢复到100%的缩放级别“修理”它。

需要注意的是Internet Explorer的状态硒webdriver的要求,这是对原住民活动的工作要求。看到here

+0

正在使用Firefox。不管怎么说,还是要谢谢你。 – 2012-05-15 14:33:46