【问题标题】:Trigger JavaScript custom event on selenium iframe element, as send_keys input values not persisting在 selenium iframe 元素上触发 JavaScript 自定义事件,因为 send_keys 输入值不持久
【发布时间】:2020-06-16 23:38:20
【问题描述】:

试图在 iframe 中存在的元素上触发 JavaScript“更改”事件。以下是我的代码轨迹

// get the iframe window
var iframeDoc = document.getElementsByTagName("iframe")[0].contentWindow.document;

// get the target element
var targetElement = iframeDoc.querySelector("#some_id");

// add a listener to the target element to make sure the event is fired
targetElement.addEventListener("onchange", function(){console.log("change event triggered");});

// set value in the target element
targetElement.value = "abc";

// now build the custom event
var customEvent = iframeDoc.createEvent("HTMLEvents");
customEvent.intEvent("change", false, true);

// trigger the event on the element
targetElement.dispatchEvent(customEvent)

// now click on the save button

最后一行执行后我们没有收到任何错误,并在控制台中看到消息。但是,当单击表单中的Save 按钮时,selenium 输入的值不会保留。

技术栈: Java,IE 11,硒 3.141.59 禁用原生事件

【问题讨论】:

  • 你能用相关的基于文本的 HTML 更新问题吗?
  • 将尝试去识别数据,看看我是否可以发布示例代码。
  • @supputuri 你能补充一些关于表格的信息吗?
  • 该页面依赖于不同的事件或期待受信任的事件。试试element.dispatchEvent(new Event('input'))。在调度事件之前,我还会尝试使用 Selenium 将上下文切换到框架。
  • 已尝试使用 inputchangeblurkeydownkeypresskeyup 事件,但仍然没有保存数据。我看到的不同之处在于,当我手动输入数据时,我看到使用 selenium 输入值时没有触发的少数突变事件。

标签: javascript selenium iframe


【解决方案1】:

表示minimal reproducible example 会有很大帮助(您说的是一些值、一些按钮和一些关于我们一无所知的形式),

onchange是监听change事件的DOM元素属性,实际事件名称是change

希望这会有所帮助。

【讨论】:

  • 感谢您的回复,但不幸的是,我找不到可以使用 iframe 重现此问题的通用应用程序。而且我不能分享应用程序的详细信息,因为它不是可公开访问的应用程序。
  • 除了这个 @supputuri ,它是否有助于调度 change 事件?
  • 我看到 change 事件触发,但点击保存时(表单上的值被清除)没有保留。
  • 对不起@supputuri ,但是有很多事情不清楚......是在外页还是在iframe中的表格? iframe中加载的页面是第三方页面还是你控制的页面?您是在谈论表单的值,但在您的示例代码中没有提及它们......您能否尝试澄清一下?
猜你喜欢
  • 1970-01-01
  • 2021-06-10
  • 2021-08-22
  • 1970-01-01
  • 2014-09-02
  • 2021-10-08
  • 2023-03-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多