node.js - 在 Selenium Node js 中监听事件后如何运行 driver.executeScript()?
问题描述
这是我正在尝试的代码,但它给出的内容没有定义。我想在监听事件后运行第二个 executeScript() 函数。
driver.getWindowHandle().then(function(window){
driver.executeScript(function(){
window.addEventListener('customEvent', function(e){
console.log(content = e.detail);
//return content['data'];
})
}).then(function(){
driver.manage().timeouts().implicitlyWait(20000);
driver.executeScript("return content['data']").then(function(val){
console.log(val);
})
})
});
解决方案
我认为您需要等到事件被触发。但这是不可能的,因为 Selenium 无法监听 Web 浏览器中的事件。
您可以做的是修改事件侦听器以向 Web 应用程序写入内容。然后使用 Selenium 等待它。
我下面的代码添加了一个事件侦听器来侦听该事件customEvent
,然后立即打印该值。它将打印null
.
当事件被触发时,它会将事件值分配给一个全局值window.content
。
然后我driver.wait
用来检查window.content
. 在它等待 1000 个周期后,我将customEvent
. 您可以看到,在事件被分派后,等待将立即停止。最后,我读取了window.content
值并打印出来。
driver.getWindowHandle().then(function(window){
driver.executeScript(function(){
window.addEventListener('customEvent', function(e){
window.content = e.detail;
});
}).then(function(){
driver.executeScript("return window.content['data']").then(function(val){
console.log("Initial result from event: " + val);
});
});
});
var counter = 0;
driver.wait(()=> {
console.log(counter);
if(counter++ === 1000) {
driver.executeScript(()=>{
var event = new CustomEvent("customEvent", {
detail: {
data: "TEST Data from custom event"
}
});
window.dispatchEvent(event);
});
}
return driver.executeScript('return typeof window.content["data"] !== "undefined"');
});
driver.executeScript('return window.content["data"]').then((val)=>{
console.log("Result from event: " + val);
});
推荐阅读
- sql - 我是否应该将两个表合并为一张表以提高查询性能
- r - 如何缩放ggplot堆积条形图
- .htaccess - 为什么回显 htaccess-value 以文件结尾结尾?
- javafx-8 - 获取线和x轴之间的角度(屏幕的水平顶部)
- python - 推荐的方式来访问熊猫数据框中的单行?
- r - 输入保存到历史
- android - 当 Android 应用程序在写入文件时崩溃时会发生什么?
- c# - 如何在 selenium c# 中处理元素不可交互的异常
- java - IllegalArguementException 和 BeanCreationException:找不到类型错误的属性
- python-3.x - 递归函数返回 None 但打印正确的结果