2012-02-09 92 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