我正在测试的HTML有一个隐藏的复选框(显示设置为无),ID为“ed_passengers_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,这不是我的脚本,我只是测试它
答案 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比我目前所看到的更可靠