Ruby on rails cucumber rails中的通用单击步骤(含硒和不含硒)

Ruby on rails cucumber rails中的通用单击步骤(含硒和不含硒),ruby-on-rails,selenium,cucumber,capybara,Ruby On Rails,Selenium,Cucumber,Capybara,我想做一个通用的点击步骤,我可以在有@javascript标志和没有@javascript标志的场景中调用它 到目前为止: When(/^I click "([^"]*)"$/) do |clickable| click_on(clickable) end 当它不使用WebDriver时,它工作正常。但当我使用WebDriver时,它会将焦点放在链接或按钮上,但不会单击它 如果我模拟按“Enter”键,那么它在WebDriver中运行良好,但在纯Capybara测试中会引发异常 有没有一种

我想做一个通用的点击步骤,我可以在有@javascript标志和没有@javascript标志的场景中调用它

到目前为止:

When(/^I click "([^"]*)"$/) do |clickable|
  click_on(clickable)
end
当它不使用WebDriver时,它工作正常。但当我使用WebDriver时,它会将焦点放在链接或按钮上,但不会单击它

如果我模拟按“Enter”键,那么它在WebDriver中运行良好,但在纯Capybara测试中会引发异常

有没有一种方法可以使一个步骤同时适用于两个步骤

更新:


通过在点击前放置
sleep 1
,我成功地让点击链接起作用(非常怀疑它是否有效)。目前我在页面中没有javascript或异步加载。但是单击按钮仍然不起作用。

您显示的代码在使用和不使用selenium时都应能正常工作。如果不是,则通常意味着您有一些JS代码阻止了单击,或者在selenium webdriver的最新版本中,您的元素可能隐藏在其他元素后面(例如固定的页眉/页脚栏),尽管这通常会显示错误


假设你尝试的每一次点击都没有失败,那么你需要查看失败的点击,看看正在做什么常见的事情(可能会发布一些html)-因为你说1秒的睡眠可以修复它,我猜JS库正在转换某些字段,在库完成元素转换之前,单击将被忽略。

您显示的代码在使用和不使用selenium的情况下都应正常工作。如果不是,则通常意味着您有一些JS代码阻止了单击,或者在selenium webdriver的最新版本中,您的元素可能隐藏在其他元素后面(例如固定的页眉/页脚栏),尽管这通常会显示错误


假设你尝试的每一次点击都没有失败,那么你需要查看失败的点击,看看正在做什么常见的事情(可能会发布一些html)-因为你说1秒的睡眠可以修复它,我猜JS库正在转换某些字段,在库完成转换元素之前,单击将被忽略。

您可能可以尝试使用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

您可能可以尝试使用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

尝试
find\u link(link\u name)。trigger(:click)
@OlegSobchuk我希望它可以同时使用-links和buttonsfind(:link\u或\u button,locator)。trigger(:click)trigger函数显示已被弃用。“查找”不适用于值。只有css选择器(据我所知)尝试
find\u link(link\u name)。trigger(:click)
@OlegSobchuk我希望它可以同时使用-links和buttons查找(:link\u或button,locator)。trigger(:click)trigger函数显示已被弃用。“查找”不适用于值。只有css选择器(据我所知)我从页面中取出了所有javascript,然后链接就工作了。虽然当我尝试用同样的步骤提交表单时,它什么也没做(即使没有javascript)。但奇怪的是,javascript阻止点击该链接,因为该页面中没有任何内容是用javascript引用或完成的。听起来你要么委托了有点过分热心的监听器,让他们抓住点击,或者可能是JS中的一些错误阻止了JS的实际运行(远程表单提交,等等)-在问题中添加一些示例html会有助于我从页面中取出所有javascript,然后链接工作。虽然当我尝试用同样的步骤提交表单时,它什么也没做(即使没有javascript)。但奇怪的是,javascript阻止点击该链接,因为该页面中没有任何内容是用javascript引用或完成的。听起来你要么委托了有点过分热心的监听器,让他们抓住点击,或者可能是JS中的一些错误阻止了JS的实际发生(远程表单提交等)——在您的问题中添加一些示例html会有所帮助