2010-12-13 3 views
0

У меня есть этот скрипт для запуска IE, перейдите на страницу и искать какой-то текст:Powershell скрипт, чтобы сделать веб-UI Automation не работает

$ie = new-object -com "InternetExplorer.Application" 
$ie.Visible = $true 
$ie.Navigate("http://www.google.com") 
$doc = $ie.Document 
if ($doc -eq $null) 
{ 
    Write-Host "The document is null." 
    return 
} 
$tb1 = $doc.getElementsByName("q") # a text box 
$tb1.value = "search text"; 
$btn = $doc.getElementsByName("btnG") 
$btn.click() 

я сохранить это как ps1 файл и запустить его с помощью команды line ... но объект документа, возвращаемый $ie.Document, всегда равен нулю.

Что я делаю неправильно?

Кроме того, когда я запускаю сценарий по строкам в режиме интерпретатора, документ возвращается, но следующая строка $tb = $doc.getElementsByName("q") ошибок с этим: Свойство «Значение» не может быть найдено на этом объекте; убедитесь, что он существует и настраивается.

Как установить значение текстового поля?

ответ

3

Необходимо проверить, был ли IE загружен страницы до назначения $ doc. Например,

while ($ie.busy) { 
#Sleep a bit 
} 

Я пробовал один и тот же код для ввода текста поиска и нажатия кнопки, но это не сработало. Таким образом, в результате ваш код изменился до

$ie = new-object -com "InternetExplorer.Application" 
$ie.Visible = $true 
$ie.Navigate("http://www.google.com") 
While ($ie.Busy) { 
Sleep 2 
} 
$doc = $ie.Document 

$btns = $doc.getElementsByTagName("input") 
$SearchText = $btns | ? { $_.Name -eq "q" } 
$SearchText.value = "search text" 
$SearchButton = $btns | ? { $_.Name -eq "btnG" } 
$SearchButton.click() 
+0

Ravikanth, спасибо - ваше исправление работает. Но почему он не работал, когда я использовал $ doc.getElementsByName («q»)? Что-то не так с этим? –

+0

Не уверен. Он имеет несколько свойств. Возможно, нужно еще раз взглянуть на него. – ravikanth

1

Я считаю, что есть две проблемы, которые я вижу. Во-первых, важно, чтобы предложение Равикаха добавить способность ждать завершения загрузки страницы. Если вы не дождались загрузки страницы (т. Е. $ Ie.busy -eq $ false), то вы не получите полный документ.

Во-вторых, по какой-либо причине Google решил добавить несколько полей ввода с именем «q». Вы можете добавить второе условие к запросу Равиканта, как указано ниже:

$SearchText = $btns | ? { $_.Name -eq "q" -and $_.Type -eq "text"}