2016-02-28 70 views
1

我想做一個通用的點擊步驟,我可以在有和沒有@javascript標誌的場景中調用。黃瓜欄中的通用點擊步驟(含和不含硒)

到目前爲止,它是:

When(/^I click "([^"]*)"$/) do |clickable| 
    click_on(clickable) 
end 

它工作正常,當不使用的webdriver。但是當我使用WebDriver時,它將焦點放在鏈接或按鈕上,但不會單擊它。

如果我模擬按下「Enter」,那麼它對WebDriver工作正常,但在純水豚測試中引發異常。

有沒有一種方法可以同時使用兩個步驟?

UPDATE:

通過將sleep 1點擊之前,我設法單擊工作聯繫(高度懷疑,它是有效的)。在這一點上,我在頁面中沒有javascript或異步加載。但點擊按鈕仍然無法正常工作。

+0

嘗試'find_link(LINK_NAME).trigger(:點擊)' –

+0

@OlegSobchuk我希望它與磁盤後鏈接和按鈕 – Kkulikovskis

+0

找到工作(:link_or_button,定位器).trigger(:點擊) –

回答

0

您顯示的代碼應該在使用硒和不使用硒的情況下正常工作。如果不是這樣,通常意味着你有一些阻止點擊的JS代碼,或者使用最近版本的selenium-webdriver,你的元素可能隱藏在其他元素的後面(例如固定的頁眉/頁腳欄) - 儘管通常會顯示錯誤。

假設每次點擊都沒有失敗,那麼你需要看看那些失敗的東西,看看正在做什麼常見的事情(也許發佈一些html) - 因爲你說1秒的睡眠修復它,我想你有一些字段被JS庫轉換和點擊被忽略,直到庫完成轉換元素。

+0

我從頁面中拿出所有的javascript,然後鏈接工作。雖然當我嘗試用同一步提交表單時,它什麼也沒做(即使沒有javascript)。這是奇怪的,雖然,JavaScript是防止點擊該鏈接,因爲該頁面中沒有被引用或在JavaScript中完成。 – Kkulikovskis

+0

聽起來好像你有委派的監聽者有點過分熱衷於他們抓住的點擊,或者你的JS中可能存在一些錯誤,這些錯誤會阻止你認爲應該從實際發生的JS(遠程表單提交等) - 添加你的問題的一些例子html會有所幫助 –

0

你或許可以嘗試找到使用css選擇器單擊的元素,然後單擊該元素。

def click_element(selector) 
    begin 
    el = find(:css, selector) 
    rescue Capybara::ElementNotFound => e 
    puts "Element with Selector - #{selector} not found on the page" 
    raise e 
    end 
    call_click el 
end 

def call_click (selector) 
    if (IS_HEADLESS) 
    selector.trigger('click') 
    else 
    selector.click 
    end 
end