我正在使用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;检查元素在单击后是否未更改其状态(类名,属性等)。
答案 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