【问题标题】:Why does selenium can't add event listener?为什么 selenium 不能添加事件监听器?
【发布时间】:2023-04-04 10:23:01
【问题描述】:

我试过这段代码(C#):

string javascript = "window.document.addEventListener('domready', function(){alert('READY');}, false);console.log('test');"
((IJavaScriptExecutor)d).ExecuteScript(javascript);

格式化的Javascript代码是:

window.document.addEventListener(
  'domready', 
  function() {
    alert('READY');
  }, 
  false);
console.log('test');

“就绪”弹出窗口永远不会出现。你知道如何解决这个问题吗?

页面开始加载后立即执行 javascript(console.log('test') 命令在屏幕上显示任何内容之前执行)。

【问题讨论】:

    标签: javascript c# selenium


    【解决方案1】:

    我相信 READY 弹出窗口永远不会显示,因为事件侦听器是在“domready”触发其事件之后添加的。您可以利用 document.readyState === "complete" 来实现您想要的,只需执行以下操作:

    if (document.readyState === "complete") {
      // do stuff
    } else {
      window.document.addEventListener('domready', doStuff);
    }
    

    希望这会有所帮助!

    【讨论】:

    • 但我在控制台中的日志会在加载开始后立即显示。这很奇怪
    • 是的,除非我遗漏了什么(这是可能的),否则我希望您的 console.log 能够显示。这基本上是发生的事情:您首先注册一个回调以在页面决定完成加载“domready”时执行。如果在 dom 准备好之后注入 Javascript,它将永远不会触发,因为该事件只发生一次。无论 'domready' 事件是否已触发,console.log('test') 都会立即执行。所以,我认为正在发生的事情是在“domready”已经触发之后,Javascript 正在被解释/执行。
    猜你喜欢
    • 1970-01-01
    • 2012-12-23
    • 2020-06-13
    • 2021-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-26
    • 2021-06-02
    相关资源
    最近更新 更多