在 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 & "');"