我目前正在从事涉及VBA和IE的自动化过程。一切顺利,我的代码正在执行多项操作。问题是,当我接近具有2个下拉列表的零件时,在第一个选择完成后出现第二个下拉列表。
我为本节开发的部分代码(相当粗糙)如下:
Dim dropY As Object
Set dropY = IE.Document.getelementbyid("selectedListType")
dropY.Focus
Application.SendKeys "{DOWN 4}"
Do While IE.Busy
Application.Wait DateAdd("s", 2, Now)
Loop
Do Until .ReadyState = 4
DoEvents
Loop
'second list
Dim dropZ As Object
Set dropZ = IE.Document.getelementbyid("dataSet")
dropZ.Focus 'I can see that the window is being selected
Application.SendKeys ("{DOWN 1}") 'at this point the code fails
Application.SendKeys ("{ENTER}")
问题是,如何在两个下拉列表中进行选择以避免将来发生错误?以下是网站资源。
'first list
Select List Type
<select name="selectedListType" id="selectedListType" class="regular" onchange="onSubmitOrgConfig(2)">
<option value="Choice1"
>
Country Lists
</option>
<option value="Choice2"
>
Region Lists
</option>
<option value="Choice3"
>
Area Lists
</option>
<option value="Choice4"
>
Aggregated Lists
</option>
<option value="OTHER"
selected>
Other Lists
</option>
<option value="Other1"
>
Secure List
</option>
</select>
Select List
<select name="dataSet" id="dataSet" class="regular" onchange="onSubmitDataSet(6, this.value);">
<option value="">--Select--</option>
<option value="LIST_1"
>
BLACKLIST_LIST
</option>
<option value="LIST_2"
>
BLUE_LIST
</option>
<option value="LIST_3"
selected>
RED_LIST
</option>
<option value="LIST_4"
>
YELL_LIST
</option>
<option value="LIST_5"
>
PURP_LIST
</option>
<option value="LIST_6"
>
BL_LIST
</option>
<option value="LIST_7"
>
ORA_LIST
</option>
<option value="LIST_8"
>
NOCOL_LIST
</option>
<option value="LIST_999"
>
LIST_999
</option>
</select>
答案 0 :(得分:3)
tl; dr;
如果没有网页可玩,那么很难为事件的排序提供建议,如果下面的所有内容都能正常工作,但希望会有所帮助。
例如,我不知道您是否必须单击“单击第一个”列表,选择一个项目,然后会自动触发附加的javascript,或者是否需要实际触发该事件。然后,如果您必须重复第二次。因此,在下面,我向您展示了我将如何尝试分别实现每个动作,以便您可以与他们一起玩以查看有效的方法。我们可以根据反馈进行完善。
selectedListType下拉列表:
您可以尝试用
单击第一个列表.document.querySelector("#selectedListType").Click
您可以使用以下方法从第一个列表中选择项目:
.document.querySelector("#selectedListType [value='Choice1']")
适当更改Choice1
因此标记为selected
可能是
.document.querySelector("#selectedListType [value='Choice1']").Selected = True
数据集下拉列表:
您可以尝试使用
单击第二个列表.document.querySelector("#dataSet").Click
您可以使用以下方法从第二个列表中选择项目:
.document.querySelector("#dataSet option[value='LIST_1']")
适当更改LIST_1
因此标记为selected
可能是
.document.querySelector("#dataSet option[value='LIST_1']").Selected = True
onchange
事件:
两个列表都有一个onchange
事件:
您可以通过以下方式触发这些
.document.querySelector("#selectedListType").FireEvent "onchange"
.document.querySelector("#dataSet").FireEvent "onchange"