在 SeleniumBasic 中为 "hidden" 输入网络元素赋值 Chrome
Assign a value to a "hidden" input webelement, in SeleniumBasic for Chrome
我必须使用 Excel VBA 中的 selenium basic 将 Web 自动化程序从 Excel VBA 控制的 IE 迁移到 Chrome。 16=]
网站本身不是 public,所以我无法分享 link。
显示两周日历的页面默认从今天开始,以输入特定后续日期的事件。
我想更改默认日期并让网站更改显示的日期以从该新日期开始。
这涉及更改隐藏输入网络元素的“值”属性,其 ID =“_ctl1_currentDate”,使用 VBA Excel.
中的本机驱动程序与 IE 一起工作
我无法使用 Excel VBA Chrome 的 Selenium Basic 驱动程序。
这是网络元素的html:
<input name="_ctl1:currentDate" type="hidden" id="_ctl1_currentDate" value="19/01/2022">
这是与此网络元素关联的 Javascript:
<script language="javascript">
/* une fonction permettant de se déplacer dans calendrier */
function move(direction) {
var date = document.getElementById("_ctl1_currentDate").value;
var day;
var month;
var year;
var t = new Date();
var newDate;
var newMonth;
var newDay;
if (date.charAt(2) == "/") {
day = date.substring(0, 2);
if (date.charAt(5) == "/") {
month = date.substring(3, 5);
year = date.substring(6, 10);
} else {
month = date.substring(3, 4);
year = date.substring(5, 9);
}
} else {
day = date.substring(0, 1);
if (date.charAt(4) == "/") {
month = date.substring(2, 4);
year = date.substring(5, 9);
} else {
month = date.substring(2, 3);
year = date.substring(4, 8);
}
}
t.setDate(1);
t.setYear(year);
t.setMonth(month - 1);
t.setDate(day);
t = DateAdd("d", t, direction * 10);
newMonth = t.getMonth() + 1;
newDay = t.getDate();
if (newDay < 10) { newDay = "0" + newDay; }
if (newMonth < 10) { newMonth = "0" + newMonth; }
newDate = newDay + "/" + newMonth + "/" + t.getFullYear();
document.getElementById("_ctl1_currentDate").value = newDate;
document.getElementById("aspnetForm").submit();
}
/* cette fonction fait un submit de la form globale TheForm, présente sur chaque page de portail */
function redirectToQstWithDate(typeQST, OptMA, date) {
var theForm = getTheForm();
theForm.action = '' + document.getElementById("_ctl1_redirectUrl").value + '';
if (OptMA && OptMA != "") {
document.getElementById('OPTMA').value = OptMA;
}
document.getElementById('QST').value = typeQST;
document.getElementById('ScreenSize').value = window.screen.width;
document.getElementById('InputDate').value = date;
__doPostBack('', '');
}
</script>
此代码适用于 IE,其中“jumpdate”(字符串)= 我要替换默认(当前)日期的日期:
IE.document.getElementById("_ctl1_currentDate").Value = jumpDate
IE.document.getElementById("aspnetForm").submit
Selenium Basic 中上述代码第一行的等效尝试,它产生了 SeleniumError“Element not interactable”。 “ch”是 Chrome 驱动程序参考:
ch.FindElementById("_ctl1_currentDate").SendKeys (jumpDate)
我感觉 Selenium 不允许我更改 Chrome 中该元素的值。我想我需要解雇相关的 Javascript;这基本上就是我对旧 IE 代码的第二行所做的,同时用旧 IE 代码的第一行更改参数。
我无法使用 .executeScript 函数获得在 Selenium Basic 中执行与此等效的语法。
使用 ExecuteScript
方法设置值属性的 selenium basic 翻译如下,您在 jumpDate 值中连接
.ExecuteScript "document.getElementById('_ctl1_currentDate').setAttribute('value','" & jumpDate & "');"
我必须使用 Excel VBA 中的 selenium basic 将 Web 自动化程序从 Excel VBA 控制的 IE 迁移到 Chrome。 16=]
网站本身不是 public,所以我无法分享 link。
显示两周日历的页面默认从今天开始,以输入特定后续日期的事件。
我想更改默认日期并让网站更改显示的日期以从该新日期开始。
这涉及更改隐藏输入网络元素的“值”属性,其 ID =“_ctl1_currentDate”,使用 VBA Excel.
我无法使用 Excel VBA Chrome 的 Selenium Basic 驱动程序。
这是网络元素的html:
<input name="_ctl1:currentDate" type="hidden" id="_ctl1_currentDate" value="19/01/2022">
这是与此网络元素关联的 Javascript:
<script language="javascript">
/* une fonction permettant de se déplacer dans calendrier */
function move(direction) {
var date = document.getElementById("_ctl1_currentDate").value;
var day;
var month;
var year;
var t = new Date();
var newDate;
var newMonth;
var newDay;
if (date.charAt(2) == "/") {
day = date.substring(0, 2);
if (date.charAt(5) == "/") {
month = date.substring(3, 5);
year = date.substring(6, 10);
} else {
month = date.substring(3, 4);
year = date.substring(5, 9);
}
} else {
day = date.substring(0, 1);
if (date.charAt(4) == "/") {
month = date.substring(2, 4);
year = date.substring(5, 9);
} else {
month = date.substring(2, 3);
year = date.substring(4, 8);
}
}
t.setDate(1);
t.setYear(year);
t.setMonth(month - 1);
t.setDate(day);
t = DateAdd("d", t, direction * 10);
newMonth = t.getMonth() + 1;
newDay = t.getDate();
if (newDay < 10) { newDay = "0" + newDay; }
if (newMonth < 10) { newMonth = "0" + newMonth; }
newDate = newDay + "/" + newMonth + "/" + t.getFullYear();
document.getElementById("_ctl1_currentDate").value = newDate;
document.getElementById("aspnetForm").submit();
}
/* cette fonction fait un submit de la form globale TheForm, présente sur chaque page de portail */
function redirectToQstWithDate(typeQST, OptMA, date) {
var theForm = getTheForm();
theForm.action = '' + document.getElementById("_ctl1_redirectUrl").value + '';
if (OptMA && OptMA != "") {
document.getElementById('OPTMA').value = OptMA;
}
document.getElementById('QST').value = typeQST;
document.getElementById('ScreenSize').value = window.screen.width;
document.getElementById('InputDate').value = date;
__doPostBack('', '');
}
</script>
此代码适用于 IE,其中“jumpdate”(字符串)= 我要替换默认(当前)日期的日期:
IE.document.getElementById("_ctl1_currentDate").Value = jumpDate
IE.document.getElementById("aspnetForm").submit
Selenium Basic 中上述代码第一行的等效尝试,它产生了 SeleniumError“Element not interactable”。 “ch”是 Chrome 驱动程序参考:
ch.FindElementById("_ctl1_currentDate").SendKeys (jumpDate)
我感觉 Selenium 不允许我更改 Chrome 中该元素的值。我想我需要解雇相关的 Javascript;这基本上就是我对旧 IE 代码的第二行所做的,同时用旧 IE 代码的第一行更改参数。
我无法使用 .executeScript 函数获得在 Selenium Basic 中执行与此等效的语法。
使用 ExecuteScript
方法设置值属性的 selenium basic 翻译如下,您在 jumpDate 值中连接
.ExecuteScript "document.getElementById('_ctl1_currentDate').setAttribute('value','" & jumpDate & "');"