我的最终目标是能够滚动到handsontable的底部,并使用python/selenium脚本以编程方式(“手动”)添加一行数据(javascript也可以通过driver.execute_script(js_script)
函数执行)。我不能只添加一行数据而不滚动,因为表中的所有元素只有滚动到视图中才会加载。我尝试了很多方法来避免使用jQuery函数(如$('selector').trigger(evt)
和selenium ActionChains
类)中的任何内容来使用anvil,但没有一种方法对我有效。理想情况下,我想这样做:
var e = jQuery.Event('wheel', {deltaY: 120});
$('#am-editor-table > div > div.wtHider > div.wtSpreader > table > tbody > tr:nth-child(1) > td:nth-child(2)').trigger(e);
但这也不行。(deltaY是wheel事件的属性,将其设置为正值会导致向下滚动。)下面是我正在使用的网站:https://live.amcharts.com/。只要创建一个图表,你就会看到我所说的表格。以下是处理handsontable上鼠标滚轮事件的处理程序的源代码,可以在google dev模式下使用事件侦听器断点找到该处理程序:
function handler(event) {
var orgEvent = event || window.event, args = [].slice.call(arguments, 1), delta = 0, deltaX = 0, deltaY = 0, absDelta = 0, absDeltaXY = 0, fn;
event = $.event.fix(orgEvent);
event.type = "mousewheel";
if (orgEvent.wheelDelta) {
delta = orgEvent.wheelDelta;
}
if (orgEvent.detail) {
delta = orgEvent.detail * -1;
}
if (orgEvent.deltaY) {
deltaY = orgEvent.deltaY * -1;
delta = deltaY;
}
if (orgEvent.deltaX) {
deltaX = orgEvent.deltaX;
delta = deltaX * -1;
}
if (orgEvent.wheelDeltaY !== undefined) {
deltaY = orgEvent.wheelDeltaY;
}
if (orgEvent.wheelDeltaX !== undefined) {
deltaX = orgEvent.wheelDeltaX * -1;
}
absDelta = Math.abs(delta);
if (!lowestDelta || absDelta < lowestDelta) {
lowestDelta = absDelta;
}
absDeltaXY = Math.max(Math.abs(deltaY), Math.abs(deltaX));
if (!lowestDeltaXY || absDeltaXY < lowestDeltaXY) {
lowestDeltaXY = absDeltaXY;
}
fn = delta > 0 ? 'floor' : 'ceil';
delta = Math[fn](delta / lowestDelta);
deltaX = Math[fn](deltaX / lowestDeltaXY);
deltaY = Math[fn](deltaY / lowestDeltaXY);
args.unshift(event, delta, deltaX, deltaY);
return ($.event.dispatch || $.event.handle).apply(this, args);
}
老实说,我不知道handsontable在内部是如何工作的,它的文档也很差。我真的觉得我应该能够滚动一个特定的元素,而不必知道所有这些,但什么都不起作用,所以我刚刚进入了这个巨大的兔子洞。任何帮助都将不胜感激
谢谢, 杰克
目前没有回答
相关问题 更多 >
编程相关推荐