如果 Capybara 有许多相同类型的按钮,如何按下任何可用按钮?
How to press on any available button if there are many same type buttons with Capybara?
我有很多按钮,但在我的测试中我不想 choose/press 同一个按钮。最好测试是否随机 choose/press 任何可用按钮。
带有按钮的代码示例以及image它在现实生活中的样子
<a onclick="ShowDayPopup('clientCode', 'clientObject', '16', '2018.03', '144', 'atk'); return false;" id="ctl00_ContentPlaceHolder1_btnInsert_1591580_16" class="cool-button blue width73" href='javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions("ctl00$ContentPlaceHolder1$btnInsert_1591580_16", "", true, "", "", false, true))'>Button</a>
<a onclick="ShowDayPopup('clientCode', 'clientObject', '17', '2018.03', '144', 'atk'); return false;" id="ctl00_ContentPlaceHolder1_btnInsert_1591580_17" class="cool-button blue width73" href='javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions("ctl00$ContentPlaceHolder1$btnInsert_1591580_17", "", true, "", "", false, true))'>Button</a>
如评论中所述,在测试中出现随机行为通常不是一个好主意,但是要执行您在问题中提出的问题,您可以使用 all
获取所有匹配的按钮,然后使用 sample
随机选择一个成员。首先需要的是一个选择器来选择所有可能的按钮。鉴于您提供的 HTML,您可以使用 CSS 选择器或使用 :link 选择器并分别指定 class(es)
all('a.cool-button', minimum: 1).sample.click
或
all(:link, class: 'cool-button', minimum: 1).sample.click
minimum: 1
指定触发 waiting/retrying 行为,以防按钮在页面上动态加载(在 Capybara 3.0 中不需要)
我有很多按钮,但在我的测试中我不想 choose/press 同一个按钮。最好测试是否随机 choose/press 任何可用按钮。
带有按钮的代码示例以及image它在现实生活中的样子
<a onclick="ShowDayPopup('clientCode', 'clientObject', '16', '2018.03', '144', 'atk'); return false;" id="ctl00_ContentPlaceHolder1_btnInsert_1591580_16" class="cool-button blue width73" href='javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions("ctl00$ContentPlaceHolder1$btnInsert_1591580_16", "", true, "", "", false, true))'>Button</a>
<a onclick="ShowDayPopup('clientCode', 'clientObject', '17', '2018.03', '144', 'atk'); return false;" id="ctl00_ContentPlaceHolder1_btnInsert_1591580_17" class="cool-button blue width73" href='javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions("ctl00$ContentPlaceHolder1$btnInsert_1591580_17", "", true, "", "", false, true))'>Button</a>
如评论中所述,在测试中出现随机行为通常不是一个好主意,但是要执行您在问题中提出的问题,您可以使用 all
获取所有匹配的按钮,然后使用 sample
随机选择一个成员。首先需要的是一个选择器来选择所有可能的按钮。鉴于您提供的 HTML,您可以使用 CSS 选择器或使用 :link 选择器并分别指定 class(es)
all('a.cool-button', minimum: 1).sample.click
或
all(:link, class: 'cool-button', minimum: 1).sample.click
minimum: 1
指定触发 waiting/retrying 行为,以防按钮在页面上动态加载(在 Capybara 3.0 中不需要)