Capybara:找到点击的元素

时间:2015-05-10 10:03:46

标签: selenium capybara

我正在使用Cucumber和Selenium webdriver。

中有注销方法时
After do |scenario|

并且注销按钮没有单击(在我的示例中存在另一个阻止所有内容的大div),在报告中我收到一个错误,告诉我哪个元素实际上会获得点击:

unknown error: Element is not clickable at point (979, 15). Other element would receive the click: <div class="locking-layer show"></div>

是否可以实现这样的检查,以确定哪个元素从用户那里获得了点击?这对点击率很有帮助&#34;检查元素在单击后是否未更改其状态(类名,属性等)。

2 个答案:

答案 0 :(得分:0)

我用不同的方法实现了相同的功能,我在我的功能文件中定义了一个步骤,如

page.execute_script("jQuery('#profile_dropdown').show();") # I have dropdown in which there is a link 'Logout'
click_link('Logout')

然后在步骤定义中我们通过以下方式实现:

OracleConnection

我想你会有个主意。

答案 1 :(得分:0)

所以,我现在所做的不仅仅是捕捉被点击的元素,而是模拟鼠标点击所需元素的坐标并检查页面地址是否没有改变。 显然,它仅适用于注销时很容易确定更改的情况,并且一般不能解决问题。

现在(虽然仍然希望找到并使用Capybara方法来捕捉一个被点击的元素)但我得到了所需的选择器,确定了它的坐标并点击它们。

def get_position(selector)   
    page.execute_script <<-EOS
      var elem1 = document.querySelector('#{selector}');
      var rect1 = elem1.getBoundingClientRect();
      return [rect1.left, rect1.top];   
    EOS 
end

def click_position(x, y)   
    page.execute_script <<-EOS
      $(document.elementFromPoint(#{x}, #{y})).click();
    EOS 
end

Then /^within "here is section of web-page" I click on the coordinates of "here is the name of the element"$/ do |section, click_target|
  section.to_s
  click_target.to_s
  section = human2selector(section)

  # get selector
  click_target = "#{section} #{click_target}"

  # get position of element
  click_target_coordinates = get_position(click_target)

  # click coordinates (each coordinate + 1) of element
  click_position((click_target_coordinates[0] + 1).to_i, (click_target_coordinates[1] + 1).to_i)
end