我遇到一个问题,点击一个特定的复选框,它应该检查它下面的所有其他复选框(根参数)。 它曾经在我在元素上使用此代码时工作:
arguments[0].click();
我尝试使用普通click
方法,但它不起作用,我也尝试使用:
("document.getElementById('" + checkBoxID + "').checked=true");
("document.getElementById('" + checkBoxID + "').onchange();")
我发现当我通过JS
触发点击时,响应与我手动点击复选框时的响应不同。
值得一提的是,在复选框上手动单击会正确触发事件,并且主复选框下方的其他复选框也会被检查。
是否有其他可能的方法来触发onchange
事件?我尝试使用此命令强制onchange
:
document.getElementById("test").onchange()
提前致谢。
答案 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代码,请参阅下一个答案...