我试着点击一个角度
mat-checkbox
。直接使用Selenium通过xpath或ID执行此操作会导致与“其他元素将收到点击”相关的错误。四处搜索让我相信通过Selenium执行Javascript将是解决方案。
以下JavaScript在Chrome中工作,如果我转到
Developer Tools
,
Sources
然后单击“运行”:
function eventFire(el, etype) {
if (el.fireEvent) {
el.fireEvent('on' + etype);
} else {
var evObj = document.createEvent('Events');
evObj.initEvent(etype, true, false);
el.dispatchEvent(evObj);
}
};
eventFire(document.getElementById('mat-checkbox-2-input'), 'click')
这确实会单击带有ID的复选框
mat-checkbox-2-input
.
但是,使用Selenium用C#编写代码会导致:
OpenQA.Selenium.WebDriverException : javascript error: Cannot read property 'fireEvent' of null
我的C#代码:
public void TickCheckbox()
{
var jsExecutor = (IJavaScriptExecutor)Driver;
var script =
@"function eventFire(el, etype) {
if (el.fireEvent) {
el.fireEvent('on' + etype);
} else {
var evObj = document.createEvent('Events');
evObj.initEvent(etype, true, false);
el.dispatchEvent(evObj);
}
};
eventFire(document.getElementById('mat-checkbox-2-input'), 'click')";
jsExecutor.ExecuteScript(script);
}
为什么是
el.fireEvent
当它是从Selenium执行的Javascript,而不是我自己在浏览器中执行的Javascript时为null?为什么相同的JavaScript代码在两种环境中表现不同?