背景:我每晚运行一个进程来读取数据库,然后将结果写入另一个系统。目标系统没有带有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下拉列表的价值正在发生变化,但不是每次都有。
当我在调试中运行它时,它会非常愉快地运行,但有时,我会收到以下错误:
如果我无法解决问题,是否有人知道更可靠的设置方法?
或者,是否有任何变通办法,例如将焦点设置为SELECT然后按下向下按钮(但我不知道如何执行此操作)?
答案 0 :(得分:0)
好吧,我在午餐时学到了一些东西:
似乎IE 11 SOMETIMES拒绝IHTMLElement.selectedIndex = x行,但当我将行更改为IHTMLElement.value = x时,它是可靠的!
什么时候改变了?