这段代码提供了一个来自T& C链接的复选框。
<div class="checkbox accept_agreement">
<label class="control-label" for="step_data_accept_agreement">
<input type="hidden" name="step_data[accept_agreement]" value="0">
<input type="checkbox" name="step_data[accept_agreement]" id="step_data_accept_agreement" value="1">
<label for="step_data_accept_agreement">
<a target="_blank" href="/lanevillkor/">
<font><font>I agree, have read and stored the terms and conditions</font></font>
</a>
</label>
</label>
</div>
现在,我正在使用geb进行spock测试,我尝试检索复选框元素
<input type="checkbox" name="step_data[accept_agreement]" id="step_data_accept_agreement" value="1">
这样做我尝试了许多没有预期输出的东西。我被期待像
这样的东西 $("#step_data_accept_agreement").click()
会非常直接,但事实并非如此。在另一方面,如果我将$ ("[for='step_data_accept_agreement'] label").click()
点击链接。
我试图变得更具体,但没有任何东西看起来正确地返回元素。 我的最后一次尝试是
termsAndConditionsOption(wait: true) { $("#step_data_accept_agreement", name: "step_data[accept_agreement]") }
和错误信息,就像在其他情况下一样,只有一句话
元素不可见
我想念什么?
答案 0 :(得分:0)
所以解决方案是使用js单击复选框。最简单的方法是:
def agreeOnTermsAndConditionsAccept() {
String mouseClickEvt = """
var evt = new MouseEvent('click', {
bubbles: true,
cancelable: true,
view: window
});
arguments[0].dispatchEvent(evt);
"""
browser.js.exec(termsAndConditionsOption.firstElement(), mouseClickEvt)
}
Geb提供js支持以使用javascript,正如我们在文档中找到的那样。另一个link显示了如何使用纯javascript模拟点击事件。
这是必需的,因为隐藏的复选框无法找到。使用javascript,我们可以看到&#39;元素的位置并在我们想要的位置执行操作。可以使用iniMouseEvent,因为它已被记录here