【问题标题】:Selenium C# IJavaScriptExecutor throws error but JS is fineSelenium C# IJavaScriptExecutor 抛出错误但 JS 很好
【发布时间】:2018-10-14 16:59:25
【问题描述】:

我正在使用 Selenium C# 在 Internet Explorer 11 中测试一个非常复杂的 Web UI。您可能知道,Selenium 的 Click() 往往无法正常工作,在这种情况下插入一个 JS click 方法是必要的。 我正在使用以下动态生成的脚本运行

(IJavaScriptExecutor) 驱动程序).ExecuteScript(脚本)。 这是脚本:

let iFrame = document.getElementById("dkwframe").contentWindow.document;
let element = iFrame.querySelector("[id*='_ImgLnkNewPage_LinkButtonControl']");
element.click();

当我直接在 IE 控制台中执行脚本时,它可以正常工作,但是当使用它执行 Selenium 时,我得到了这个:

System.InvalidOperationException : Error executing JavaScript (UnexpectedJavaScriptError)

IE 控制台是空的,所以我不认为它在尝试。此外,切换浏览器不是一种选择。

感谢您的帮助

【问题讨论】:

  • 请注意,通过调用.click(),您不再模拟用户点击,也不再编写端到端测试。来自 Javascript 的 click 仅执行底层侦听器或附加重定向,这并不能验证真实用户是否能够单击目标元素。关于您的错误,IE11 不支持let,应替换为var
  • 您好,感谢您的回复。我知道调用 .click() 并不理想,但这是我唯一的解决方案。至于我点击的内容,我确保它是一个可点击的元素。我会尽快用 var 替换 let!
  • 不,即使用 var 替换 let 也不会改变任何事情

标签: javascript c# selenium click


【解决方案1】:

可能在页面完全加载之前脚本正在执行,尝试将其放入页面就绪事件处理程序中

window.onload = function() {
    et iFrame = document.getElementById("dkwframe").contentWindow.document;
    let element = iFrame.querySelector("[id*='_ImgLnkNewPage_LinkButtonControl']");
    element.click();
}

或者您可以检查是否已满载:

if (document.readyState === 'complete') {
}

【讨论】:

  • 如果有帮助请告诉我
  • 您好,谢谢。不幸的是,完全加载窗口并将脚本放入函数中并没有解决它:/
猜你喜欢
  • 2020-08-17
  • 2018-04-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-01
相关资源
最近更新 更多