0

Я пишу сценарий PowerShell, который запускает веб-редактор Selenium. То, что я планирую сделать, это открыть страницу, открыть дополнительные вкладки x, вернуться к первой вкладке, сделать что-то, перейти к следующей вкладке, сделать что-нибудь и так далее.Selenium Webdriver on PowerShell Функция SendKey посылает ключи в текущем активном окне, а не в вызываемом селеном браузере

Но когда я использую SendKeys в коде для отправки Ctrl + T, чтобы открыть новую вкладку, если активен браузер с активированным Selenium, он посылает Ctrl + T в мое активное окно (например, Powershell ISE (What это значит, что он открывает новую вкладку PowerShell)).

Надеюсь, вы можете мне помочь, ребята.

Вот код:

Add-Type -AssemblyName "System.Windows.Forms" 

Set-Location "$PSScriptRoot\selenium-dotnet-2.53.0\net35" 
[System.Reflection.Assembly]::LoadFrom("$PSScriptRoot\selenium-dotnet-2.53.0\net35\Selenium.WebDriverBackedSelenium.dll") 
[System.Reflection.Assembly]::LoadFrom("$PSScriptRoot\selenium-dotnet-2.53.0\net35\ThoughtWorks.Selenium.Core.dll") 
[System.Reflection.Assembly]::LoadFrom("$PSScriptRoot\selenium-dotnet-2.53.0\net35\WebDriver.dll") 
[System.Reflection.Assembly]::LoadFrom("$PSScriptRoot\selenium-dotnet-2.53.0\net35\WebDriver.Support.dll") 

$servers = ` 
"http://facebook.com", ` 
"http://google.com" 

$driver = New-Object "OpenQA.Selenium.FireFox.FirefoxDriver" 
$driver.Manage().Window.Maximize(); 

$actions = New-Object OpenQA.Selenium.Interactions.Actions($driver) 

for ($i = 0; $i -lt $($servers.Length); $i++){ 
    $driver.Navigate().GoToUrl($servers[$i]) 
    if ($i + 1 -ne $($servers.Length)) { 
     $driver.FindElementByCssSelector("body").SendKeys($body,[System.Windows.Forms.SendKeys]::SendWait("^t")) | Out-Null 
    } 
} 

foreach($server in $servers){ 
    $driver.FindElementByCssSelector("body").SendKeys($body,  [System.Windows.Forms.SendKeys]::SendWait("^{TAB}")) | Out-Null 
    $driver.SwitchTo().DefaultContent() 
} 

ответ

0

Вы могли бы проверить Appactive() метод или проверить текущее активное окно и продолжить.

EDIT: вы можете убить другие сеансы браузера, прежде чем селен откроет один и активирует активные окна с помощью приложения.

С уважением,

kvprasoon

+0

Спасибо! Это работает, но как я хочу, чтобы он вел себя, это похоже на запуск Selenium из Visual Studio, где он отправляет только ключи к обозревателю Selenium, независимо от того, какое приложение активно. Вы знаете, как это сделать? Благодарю. –

+0

Если вы также можете предоставить мне способ открытия новых и переключения вкладок без использования метода SendKeys, это будет решетка. :) –

+0

Не знаю, как тестировать селен и UI, но вы можете убить другие сеансы браузера, прежде чем селен откроет один из них и сделает активные окна с помощью приложения. Я считаю, что мы должны ожидать зависимостей при тестировании пользовательского интерфейса ... –

1

Вместо двух команд SendKeys, попробуйте использовать:

$driver.executeScript("window.open('http://YourDomainGoesHere.com/', '_blank')") 

Работает с IE, но не пробовал сам с Firefox.

Смежные вопросы