代码之家  ›  专栏  ›  技术社区  ›  cbll

C#/Selenium:javascript错误:无法读取null的属性“fireEvent”

  •  0
  • cbll  · 技术社区  · 4 年前

    我试着点击一个角度 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代码在两种环境中表现不同?

    0 回复  |  直到 4 年前