Examples/test-seremote.ps1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 |
$PSGalleryPage = 'https://www.powershellgallery.com/' $AlertTestPage = 'https://www.w3schools.com/js/tryit.asp?filename=tryjs_alert' $SelectTestPage = 'https://www.w3schools.com/html/tryit.asp?filename=tryhtml_elem_select' #other services at #https://crossbrowsertesting.com/freetrial / https://help.crossbrowsertesting.com/selenium-testing/getting-started/c-sharp/ #https://www.browserstack.com/automate/c-sharp $key = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' $secret = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' $RemoteDriverURL = [uri]"http://$key`:$secret@hub.testingbot.com/wd/hub" $caps = @{ platform = 'HIGH-SIERRA' browserName = 'safari' version = '11' } Start-SeRemote -RemoteAddress $RemoteDriverURL -DesiredCapabilities $caps -AsDefaultDriver -StartURL $PSGalleryPage $BrowserID = $SeDriver.Capabilities.ToDictionary()["platformName", "browserName", "version"] -join " " Describe "All in one Test" { Context "in $BrowserID with settings ($BrowserOptText)"{ It 'opened the put the webdriver in a global variable ' { $Global:SeDriver | Should -Not -BeNullOrEmpty $Global:SeDriver | Should -BeOfType [OpenQA.Selenium.Remote.RemoteWebDriver] } It 'reached the right starting page ' { #Should have can check alerts, page title, URL or an element on the page SeShouldHave -URL eq $PSGalleryPage } It 'found the "Sign in" link on the home page by partial text ' { SeShouldHave -By PartialLinkText 'Sign in' -With href match logon } It 'found the search box on the home page by ID ' { SeShouldHave -By Id search } It 'found the search box on the home page by Name ' { SeShouldHave -By Name 'q' } It 'found the search box on the home page by css selector ' { #can write -By <<mechanism>> [-selection] <<selection text>> # or [-selection] <<selection text>> -By <<mechanism>> SeShouldHave 'input[name=q]' -By CssSelector } It 'found the search box on the home page by class name ' { SeShouldHave -By ClassName "search-box" } It 'found the search box on the home page by Tagname and typed in it ' { #get element, pipe as input element for Typing, pass the element through #so pester catches 'null or empty' if it was not found SeElement -By TagName input | SeType -ClearFirst "selenium{{Enter}}" -PassThru -SleepSeconds 2 | Should -Not -BeNullorEmpty } $linkpath = '//*[@id="skippedToContent"]/section/div[1]/div[2]/div[2]/section[1]/div/table/tbody/tr/td[1]/div/div[2]/header/div[1]/h1/a' It 'searched successfully ' { SeShouldHave -URL match 'packages\?q=selenium' -Timeout 15 #Two tests on the same element, second passes it through to click SeShouldHave $linkpath -With href match selenium SeShouldHave $linkpath -With Text like *selenium* -PassThru | SeClick -SleepSeconds 5 } It 'opened the search result page and found the expected content ' { #Just to show we can test for the presence of multiple links. Each one is re-tested ... SeShouldHave '//*[@id="version-history"]/table/tbody[1]/tr[1]/ td[1]/a/b' , '//*[@id="skippedToContent"]/section/div/aside/ul[2]/li[1]/a' -Timeout 15 SeShouldHave '//*[@id="version-history"]/table/tbody[1]/tr[1]/ td[1]/a/b' -With text match "current" #Can test with "Get-SeElement | where-object <<complex test>>" rather than "with <<feild>> <<operator>> <<value>>" SeElement '//*[@id="skippedToContent"]/section/div/aside/ul[2]/li[1]/a' | Where-Object {($_.text -like "*Project Site*") -and ($_.GetAttribute('href') -match "selenium") } | SeClick -PassThru | Should -Not -Benullorempty } It 'went to Github from the project link on the search result ' { SeShouldHave -URL match 'github' -Timeout 30 } It 'navigated back to the start page ' { SeNavigate -Back SeNavigate -Back SeNavigate -Back SeShouldHave -URL eq $PSGalleryPage -Timeout 30 } It 'did a google Search ' { SeNavigate 'https://www.google.com/ncr' SeShouldHave -by Name q SeShouldHave -by ClassName 'gLFyf' SeShouldHave -By TagName input -With title eq 'Search' -PassThru | Select-Object -First 1 | SeType -Keys 'Powershell-Selenium{{Enter}}' -PassThru | should -Not -BeNullOrEmpty SeShouldHave '//*[@id="tsf"]/div[2]/div[1]/div[1]/a' -PassThru | SeClick -PassThru | should -Not -BeNullOrEmpty } It 'opened the the alert test-page ' { SeNavigate $alertTestPage SeShouldHave -URL -eq $alertTestPage } It 'found and clicked a button in frame 1 ' { SeShouldHave -Selection "iframe" -By TagName -with id eq iframeResult SeFrame 'iframeResult' SeElement "/html/body/button" | SeClick -PassThru | Should -Not -BeNullOrEmpty } It 'saw and dismissed an alert ' { #Checking the text of the alert is optional. Dissmiss can pass the alert result through SeShouldHave -Alert match "box" -PassThru | SeDismiss -PassThru | Should -Not -BeNullOrEmpty } It 'reselected the parent frame ' { SeFrame -Parent SeShouldHave -Selection "iframe" -By TagName -with id eq iframeResult } It 'navigated to a new page, and found the "cars" selection box in frame 1 ' { SeNavigate $SelectTestPage SeShouldHave -Selection "iframe" -By TagName -with id eq iframeResult SeFrame 'iframeResult' SeShouldHave -By Name "cars" -With choice contains "volvo" } It 'made selections from the "cars" selection box ' { $e = SeElement -by Name "cars" #Values are lower case Text has inital caps comparisons are case sensitve. Index is 0-based {$e | SeSelection -ByValue "Audi"} | Should -Throw {$e | SeSelection -ByValue "audi"} | Should -Not -Throw $e | SeSelection -ByIndex "2" -GetSelected | Should -Be 'Fiat' $e | SeSelection -ByPartialText "Sa" } It 'submitted the form and got the expected response ' { SeElement '/html/body/form/input' | SeClick -SleepSeconds 5 SeFrame -Parent SeFrame 'iframeResult' SeShouldHave "/html/body/div[1]" -with text match "cars=saab" } } } SeClose |