为什么我的SELECT控件改变selectedIndex有时不会改变?

时间:2017-01-27 10:42:35

标签: c# html

背景:我每晚运行一个进程来读取数据库,然后将结果写入另一个系统。目标系统没有带有UI的HTML Web Service以外的接口。我几年前最初设置了这个系统,在IE 9中运行时它非常可靠。但是,我必须运行此过程的主机已从Windows 2008 R2更改为2012 R2并且IE的版本已更改为IE 11并且它主要起作用,但在某些情况下令人愤怒,它不起作用。

我正在操作一个带有下拉菜单的网页,其中包含"关闭" (值= 0)或"开" (value = 1)并且下拉列表的名称是可变的,因为有多个相同的下拉列表,我找到并单独设置。

我已经编写了一些代码来查找SELECT并设置值,但在某些情况下,它的工作方式就像一个魅力,而在其他情况下,它只是不设置值,即使我已经逐步完成代码并观察IE与页面,其中没有设置值。代码在这里:

bool bDone = false;
mshtml.IHTMLElementCollection objEventCollection = (mshtml.IHTMLElementCollection)objDocument.getElementsByTagName("select");
for (int i = 0; i < objEventCollection.length; i++)
{
    mshtml.IHTMLElement objElement = (mshtml.IHTMLElement)objEventCollection.item(i, 0);
    if (objElement.getAttribute("name").EndsWith("NewEvent"))
    {
        objElement.click();
        mshtml.HTMLSelectElement objEvent = (mshtml.HTMLSelectElement)objElement;
        switch (sEventType)
        {
            case "Off":
                objEvent.selectedIndex = 0; // This SOMETIMES works and SOMETIMES will error out!
                bDone = true;
                break;
            case "On":
                objEvent.selectedIndex = 1; // This SOMETIMES works and SOMETIMES will error out!
                bDone = true;
                break;
        }
    }
    if (bDone)
    {
        break;
    }
}
bOK = bDone;

相关的网页代码如下所示:

<td valign="middle" align="center"><input class="data" type="hidden" name="No1EventString" value="0"><input class="data" type="hidden" name="No1OriginalEvent" value="0"><select class="data" name="No1NewEvent">
<option value="0" selected="">Off</option>
<option value="1">On</option>
</select></td>

我不知道为什么SOMETIMES,NewEvent下拉列表的价值正在发生变化,但不是每次都有。

当我在调试中运行它时,它会非常愉快地运行,但有时,我会收到以下错误:

enter image description here

如果我无法解决问题,是否有人知道更可靠的设置方法?

或者,是否有任何变通办法,例如将焦点设置为SELECT然后按下向下按钮(但我不知道如何执行此操作)?

1 个答案:

答案 0 :(得分:0)

好吧,我在午餐时学到了一些东西:

似乎IE 11 SOMETIMES拒绝IHTMLElement.selectedIndex = x行,但当我将行更改为IHTMLElement.value = x时,它是可靠的!

什么时候改变了?