2016-07-24 44 views
1

我有一个问题点击一个特定的复选框,它应该检查下面的所有其他复选框(根参数)。 它曾经在工作的时候使用这个元素的代码:硒通过Java - 点击复选框不同的响应比手动点击

arguments[0].click(); 

我曾尝试使用正常click方法,但它不工作,我还试图用:

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

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

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

在此先感谢。从here

+0

平变化是一个事件处理程序。你不能像这样调用它来调用系统事件。 –

+0

那我该如何解决这个问题呢? –

+0

当你点击selenium方法点击()时发生了什么? –

回答

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. 
} 

实例。要使用硒看到下一个答案运行JavaScript代码...

+0

这基本上是一个代码只在SO上皱起了眉头。请花一分钟来描述代码的作用以及它如何回答问题,以便OP和未来的读者能够更好地理解。 – JeffC

+0

嘿,谢谢你的回答,但正如@JeffC所说,它唯一的代码答案,我希望更好地理解它,它做了什么。预先感谢 –

+0

你能解释我如何实现它为我的代码我试图将复选框更改为相关的ID,谢谢。 –

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); 

Edited1: - 如果你想使你复选框可见使用executeScript,并希望为PErF使用seleniumclick() ORM,尝试如下: -

el = (WebElement)executor.executeScript("arguments[0].style.display = 'block';return arguments[0];", el); 
el.click(); 

Edited2: - 我想你没有指向正确的复选框,单击以我在你提供的HTML复选框ID看到可动态生成的,你应该实现WebDriverWait TI等到复选框分享范围如下: -

JavascriptExecutor executor = (JavascriptExecutor)driver 
WebElement el = (WebElement)executor.executeScript("return document.getElementById('flattendListproductLinesTree|[email protected]@isSelected')"); 
WebDriverWait wait = new WebDriverWait(driver, 10); 
el = wait.until(ExpectedConditions.visibilityOf(el))); 
el.click(); 

希望它能帮助... :)

+0

谢谢你的回答,我试图使复选框可见,但它不工作,元素仍然不显示后运行'el =(WebElement)executor.executeScript(“arguments [0] .style.display ='block'; return arguments [0];”,el); el.click();' –

+0

@ZvikaNadav你试过第一个选项来触发事件? –

+0

@ZvikaNadav我只提供了通用的方法来使元素可见..你需要分享你的复选框HTML ..我想看看它是哪种样式不可见这就是为什么我可以使它可见 –