Это установит значение, но не вызовет обратную передачу:
function SelectValue($ddl, $val) {
$ddl.options | % {$i = 0}{ if ($_.value -eq $val) {
$ddl.selectedIndex = $i; }; $i += 1; }
}
Кроме того, как только я получу обратную передачу, мне нужно будет добавить задержку, например:
while($ie.ReadyState -ne 4) {
start-sleep -m 100
}
HTML выглядит примерно так:
<select name="ddl" onchange="__doPostBack('ddl','')" language="javascript" id="ddl" class="required" style="width:100%;">
<option value="-- Please Select --">-- Please Select --</option>
<option value="Some Value">Some Value</option>
</select>
Редактировать: Зачем мне это делать в Powershell? Вероятно, WatiN будет намного проще (хотя я никогда не использовал WatiN). Но я просто пытаюсь понять, как использовать Powershell для быстрой, специальной, ограниченной автоматизации веб-сайтов. Я много путешествую и использую разные машины, и Powershell - одна из немногих констант, от которых я могу зависеть.
Решение: Это оказалось легко и весьма полезно, потому что теперь я могу буквально написать сценарий, чтобы открыть страницу, сделать несколько выборов и нажать кнопку отправки, как по волшебству, это просто. Я думаю, что мои отношения любовь / ненависть с Powershell возвращаются к любви. В любом случае, ключ заключается в том, чтобы использовать форму отправки вместо использования события onchange, которое, как известно, не запускается при вызове с помощью JavaScript в любом случае. Вот как это сделать:
$frm = $ie.document.getElementById("frm");
$frm.submit();
Я обнаружил, что мне не нужно ждать постбэков. Для полноты нажмите кнопку так же, как в javascript:
$btnReport = $ie.document.getElementById("btnReport")
$btnReport.click()