我管理一个具有多个嵌入式网页的网站。它是Mantis Bug Tracker的一种形式,用于提交故障单。创建票证后,将为其提供一些按钮,包括“关闭”,“分配”等。我希望选择“关闭”按钮,我已经可以执行此操作,然后单击“结束记录”区域,根据我对元素的了解即可确定该区域。并使用document.querySelectorAll("input[value=Close]")[0].click()
。
这有效。但是,这是使用两个脚本完成的。
我正在尝试将其压缩为一个脚本。
我尝试添加第二页的包含内容和特定页面所需的脚本,但是在现实世界中,这种方法不太可行。
脚本1:
document.onkeyup = function(e) {
if (e.which == 117) {
document.querySelectorAll("input[value=Close]")[0].click();
} else if (e.ctrlKey && e.which == 66) {
alert("Ctrl + B shortcut combination was pressed");
} else if (e.ctrlKey && e.altKey && e.which == 89) {
alert("Ctrl + Alt + Y shortcut combination was pressed");
}
}
脚本2:
var EffectiveDate = "";
document.onkeyup = function(e) {
if (e.which == 117) {
document.querySelectorAll("textarea[name=bugnote_text]")[0].value = " ";
document.querySelectorAll("input[value='Close Ticket']")[0].click();
} else if (e.ctrlKey && e.which == 66) {
alert("Ctrl + B shortcut combination was pressed");
} else if (e.ctrlKey && e.altKey && e.which == 89) {
alert("Ctrl + Alt + Y shortcut combination was pressed");
}
}
第一组代码是为第一个初始页面设计的,它只需要找到一个特定的按钮并按一下即可。一旦处理完毕。我希望在加载新页面后让第二组代码无缝运行,但到目前为止,这是两个单独的脚本,可以成功完成我的期望。
我能够找到所需的元素,并且只需将脚本简化为一个脚本就可以正确执行所述过程。当然,它不会像给出的那样运行,但是可以在单独的用户脚本中运行。这可能吗?
答案 0 :(得分:0)
您可以使用Selenium。它具有适用于多种不同语言的库,并且由于它是专门用于测试自动化的工具,因此可能会帮助您。
您也可以尝试Selenium IDE并记录您的工作流程,以便以后在需要时重播。
希望对您有帮助!
答案 1 :(得分:0)
@match
和/或@include
指令即可在两个页面上触发。location
属性以确定要触发的代码。例如:
// ==UserScript==
// @name _Click on two pages
// @match *://YOUR_SERVER.COM/PATH_FOO/*
// @match *://YOUR_SERVER.COM/PATH_BAR/*
// @grant none
// ==/UserScript==
document.addEventListener ("keydown", zEvent => {
if (zEvent.which == 117) { // F6
zEvent.preventDefault();
if (location.pathname.includes("/PATH_FOO/") ) {
document.querySelectorAll("input[value=Close]")[0].click();
}
else if (location.pathname.includes("/PATH_BAR/") ) {
document.querySelectorAll("textarea[name=bugnote_text]")[0].value = " ";
document.querySelectorAll("input[value='Close Ticket']")[0].click();
}
}
else if (zEvent.ctrlKey && zEvent.which == 66) {
zEvent.preventDefault();
alert("Ctrl + B shortcut combination was pressed");
}
else if (zEvent.ctrlKey && zEvent.altKey && zEvent.which == 89) {
zEvent.preventDefault();
alert("Ctrl + Alt + Y shortcut combination was pressed");
}
} );
其他与问题代码有关的问题:
.preventDefault()
避免产生副作用和采取其他措施。keyup
上触发将触发得太晚,无法阻止默认操作(主要在keydown
上触发)。.on...
事件处理程序,请使用addEventListener
。alert()
进行调试很烦人且有问题(它掩盖了某些问题,并可能导致其他问题)。使用console.log
。