2016-02-28 76 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