Selenium C# - 点击隐藏的复选框并禁用锚点

时间:2018-04-18 09:36:33

标签: c# selenium testing automation

我正在测试的HTML有一个隐藏的复选框(显示设置为无),ID为“ed_pa​​ssengers_terms”。其后是一个内部有2个图标的跨度。根据是否选中该复选框,图标会更改并启用锚点。

HTML for checkbox:

<div class="field checkboxes divider-half color-focus">
              <input type="checkbox" id="ed_passengers_terms" name="ed_passengers[terms]" required="required" class="form-control  hide" value="1" />
              <label for="ed_passengers_terms" class="[ short-label  is-adjusted ]  label-stack">
                <span class="fa-stack">
                  <i class="icon-checkbox fa-stack-1x sc-grey-2"></i>
                  <i class="icon-tick text--h6 fa-stack-2x sc-yellow"></i>
                </span>
              </label>
              <span class="regular text--h6 sc-dark-grey">I accept SuperCoucou's <a target="_blank" href="/terms">Terms & Conditions</a></span>
          </div>

HTML for anchor:

<a href="#" onclick="$('.ed-book-form').submit();return false;" class="disabled btn btn-action btn-block text-uppercase text--h7 semibold view-details divider-half">next</a>

启用锚点的JavaScript:

if ($('#ed_passengers_terms').size() && $('#ed_passengers_terms').is(':checked')) {
    $('.btn-action').removeClass('disabled');
}

$('body').on('change', '#ed_passengers_terms', function() {
    if ($(this).is(":checked")) {
        $('.btn-action').removeClass('disabled');
    }
    else {
        $('.btn-action').addClass('disabled');
    }
});

我正在尝试创建一个测试,在该页面上输入一些数据,然后选中复选框以便能够单击超链接并继续。

我尝试在span,icon和div上使用Click()。它没用。 我试过了:

((IJavaScriptExecutor)driver).ExecuteScript("$('#ed_passengers_terms').checked = True;");

作为一种解决方法,我认为我可能会使用JavaScriptExecutor来启用锚点,它确实启用了它,但我似乎无法使用它来点击它:

driver.FindElement(By.CssSelector(".btn.btn-action.btn-block")).Click();

或使用:

driver.FindElement(By.XPath("//a[contains(.,'Next')]")).Click();

我需要一种能够执行以下操作的方法: 1 - 最好单击复选框,但如果不可能,我可以使用JavaScript启用锚点,因此这不是问题。 2 - 单击锚点以执行onClick操作,然后重定向到正确的页面。

P.S。我没有权限更改HTML或JavaScript,这不是我的脚本,我只是测试它

1 个答案:

答案 0 :(得分:1)

这是我找到的解决方案:

// this removes the hide class from the input which had display set to none
((IJavaScriptExecutor)driver).ExecuteScript("$('#ed_passengers_terms').removeClass('hide');"); 

// This clicked the checkbox using driver.FindElement(By.Id("id").Click(); didn't work
((IJavaScriptExecutor)driver).ExecuteScript("document.getElementById('ed_passengers_terms').click();");

// This clicked the anchor,  using driver.FindElement.Click() didn't work with class or xpath or cssSelector           
((IJavaScriptExecutor)driver).ExecuteScript("document.querySelector('.btn.btn-action.btn-block.divider-half').click();");

我是新的Selenium(第3天),但似乎javascriptexecutor比我目前所看到的更可靠