geb无法找到复选框元素

时间:2017-09-13 14:44:53

标签: groovy elements geb

这段代码提供了一个来自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]") }

和错误信息,就像在其他情况下一样,只有一句话

  

元素不可见

我想念什么?

1 个答案:

答案 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