Selenium通过Java - 点击复选框不同的响应,而不是手动点击

时间:2016-07-24 13:03:20

标签: javascript jquery html selenium checkbox

我遇到一个问题,点击一个特定的复选框,它应该检查它下面的所有其他复选框(根参数)。 它曾经在我在元素上使用此代码时工作:

arguments[0].click();

我尝试使用普通click方法,但它不起作用,我也尝试使用:

("document.getElementById('" + checkBoxID + "').checked=true");
("document.getElementById('" + checkBoxID + "').onchange();")

我发现当我通过JS触发点击时,响应与我手动点击复选框时的响应不同。 值得一提的是,在复选框上手动单击会正确触发事件,并且主复选框下方的其他复选框也会被检查。 是否有其他可能的方法来触发onchange事件?我尝试使用此命令强制onchange

document.getElementById("test").onchange()

提前致谢。

2 个答案:

答案 0 :(得分:2)

正如您所说,click()JavascriptExecutor与预期不符,您应尝试使用MouseEvents触发WebElement el = driver.findElement(By.id("checkboxId")); JavascriptExecutor executor = (JavascriptExecutor)driver executor.executeScript("function triggerMouseEvent (node, eventType) {" + "var clickEvent = document.createEvent ('MouseEvents');" + "clickEvent.initEvent (eventType, true, true);" + "node.dispatchEvent (clickEvent);" + "}triggerMouseEvent (arguments[0], 'mouseover');" + "triggerMouseEvent (arguments[0], 'mousedown');" + "triggerMouseEvent (arguments[0], 'mouseup');" + "triggerMouseEvent (arguments[0], 'click');", el); ,如下所示: -

executeScript

已修改: - 如果您想使用selenium查看复选框,并希望使用click() el = (WebElement)executor.executeScript("arguments[0].style.display = 'block';return arguments[0];", el); el.click(); 执行此操作,请尝试按以下步骤操作: -

WebDriverWait

Edited2 : - 我认为您没有指向正确的复选框,因为我在您提供的HTML复选框ID中可能会动态生成,您应该实施JavascriptExecutor executor = (JavascriptExecutor)driver WebElement el = (WebElement)executor.executeScript("return document.getElementById('flattendListproductLinesTree|1@innerVO@isSelected')"); WebDriverWait wait = new WebDriverWait(driver, 10); el = wait.until(ExpectedConditions.visibilityOf(el))); el.click(); ti等到复选框visibile如下: -

a = 48

希望它有帮助...:)

答案 1 :(得分:0)

function simulateClick() { 
var event = new MouseEvent('click',     { 'view': window, 'bubbles': true, 'cancelable': true }); //creates a mouse event
var cb =  document.getElementById('checkbox');     var canceled = !cb.dispatchEvent(event); //fires the event.
}

来自here的示例。要使用selenium运行javascript代码,请参阅下一个答案...