Yesterday, we worked on a translation of the sample from SeleniumHQ to PowerShell. One of the great PowerShell advantages is the ability to use .NET objects in code similarly to what C# programmers do. I’m speaking about the following piece of code:
$ff01 = Start-SeFirefox; $searchBox = ($ff01 | Enter-SeURL -URL "http://www.google.com/" | Get-SeWebElement -Name "q"); $searchBox.SendKeys("Cheese"); $searchBox.Submit(); sleep -Seconds 3; # to observe the result $ff01.Title; $ff01 | Stop-SeFirefox;
We have been using two variables here, $ff01 for a browser instance (the driver) and $searchBox for the prominent Google search text box. Using methods .SendKeys(text), .Submit() and properties like .Title is what is considered by purists as the ‘CSharp style’. The purists (they are also known for the abbreviation MVP. I really don’t know how they managed to shorten the word ‘purist’ to ‘MVP’ :)) state that the only right way of using PowerShell is end-to-end pipelining. Okay, today’s our efforts are put in this direction:
$ff01 = Start-SeFirefox; $searchBox = ($ff01 | ` Enter-SeURL -URL "http://www.google.com/" | ` Get-SeWebElement -Name "q" | ` Set-SeWebElementKeys -Text "Cheese" | ` Submit-SeWebElement); Write-Host "Text:"; $searchBox | Read-SeWebElementText Write-Host "Enabled:"; $searchBox | Read-SeWebElementEnabled Write-Host "Displayed:"; $searchBox | Read-SeWebElementDisplayed Write-Host "Selected:"; $searchBox | Read-SeWebElementSelected Write-Host "TagName:"; $searchBox | Read-SeWebElementTagName Write-Host "Size:"; $searchBox | Read-SeWebElementSize Write-Host "Location:"; $searchBox | Read-SeWebElementLocation sleep -Seconds 3; # to observe the result $ff01.Title; $ff01 | Stop-SeFirefox;
This time, all the code working with an WebElement is put through the pipeline.