我有一张带有' +'用于增加另一个标记内的数值的图标。
所以对于Capybara,我可以点击它:
all('.qty-input')[0].find('.more').click
但我希望能够通过变量设置点击量。我试过这样做,但它引发了一个错误,因为click不接受任何参数。
all('.qty-input')[0].find('.more').click(number_of_clicks)
我想我可以创建一个简单的方法,就像这样,但是有必要吗?没有任何内置的Capybara可以进行多次点击吗?
def multiple_clicks element, number_of_clicks
number_of_clicks.times{|n| element.click}
end
编辑:
我放在那里的原始代码是
def multiple_clicks element, number_of_clicks
number_of_clicks.map{|n| element.click}
end
哪个没有意义,所以我使用times
而不是map
方法对其进行了编辑。
答案 0 :(得分:1)
不,Capybara没有像内置的那样
答案 1 :(得分:0)
您可以使用times
循环迭代x次,具体取决于您为该变量指定的值,例如:
quantity = 10
element = browser.find(:xpath, '//*[@id="hej"]')
quantity.times do |index|
element.click
end
点击hej
内容为10次的元素。
以这种情况为例,每次点击都会增加一个计数器的input
类型按钮,以及一个显示当前点击总数的p
标签
<script>
let countClicks = 0;
document.querySelector('#hej').addEventListener('click', function() {
countClicks++;
document.querySelector('#total').innerHTML = countClicks;
});
</script>
然后使用Capybara,您还可以在p
标记内获得该总数:
puts browser.find(:xpath, '//*[@id="total"]').text
正如托马斯评论的那样,每次在块中找到元素以点击它都是很昂贵的。
element = browser.find(:xpath, '//*[@id="total"]')
Benchmark.bm do |x|
x.report { 10.times { element.text } }
x.report { 10.times { browser.find(:xpath, '//*[@id="total"]').text } }
end
user system total real
0.000000 0.000000 0.000000 ( 0.012083)
0.010000 0.000000 0.010000 ( 0.042713)