Technology Blogs by Members
Explore a vibrant mix of technical expertise, industry insights, and tech buzz in member blogs covering SAP products, technology, and events. Get in the mix!
cancel
Showing results for 
Search instead for 
Did you mean: 
stefan_schnell
Active Contributor
0 Kudos
To record and replay activities in the web browser I use Selenium, in conjunction with SAP GUI Scripting. But in some cases the browser shows a different behaviour between the recording and the replaying.

Here an example. I start the SAP Support Portal and click on Log On icon. On the same site opens a log on screen.





 

Here the recorded code in PowerShell:
#-Begin-----------------------------------------------------------------

$Path = "C:\Program Files\Selenium"

[System.Reflection.Assembly]::LoadFrom($Path + "\dotNET\Selenium.WebDriverBackedSelenium.dll")
[System.Reflection.Assembly]::LoadFrom($Path + "\dotNET\WebDriver.dll")
[System.Reflection.Assembly]::LoadFrom($Path + "\dotNET\WebDriver.Support.dll")

$Options = New-Object OpenQA.Selenium.Chrome.ChromeOptions
$Options.BinaryLocation = "C:/Program Files/Google/Chrome/Application/chrome.exe"

$driver = New-Object OpenQA.Selenium.Chrome.ChromeDriver($Path, $Options)

$baseURL = "https://support.sap.com/en/index.html"
$driver.Navigate().GoToUrl($baseURL);
$driver.FindElementByXPath("//section[@id='section_1528579655']/div/div/div/ul/li[3]/div/div/a/span").Click();
$driver.FindElementById("j_username").Clear();
$driver.FindElementById("j_username").SendKeys("S0123456789");
$driver.FindElementById("j_password").Clear();
$driver.FindElementById("j_password").SendKeys("secret");
$driver.FindElementById("logOnFormSubmit").Click();

$driver.Close()
$driver.Quit()

#-End-------------------------------------------------------------------

 

But if I replay the script, the Chrome Browser opens a new tab with the logon screen:



 

In this case the script can't find the elements username, password etc. So it is necessary to adjust the script.
#-Begin-----------------------------------------------------------------

$Path = "C:\Program Files\Selenium"

[System.Reflection.Assembly]::LoadFrom($Path + "\dotNET\Selenium.WebDriverBackedSelenium.dll")
[System.Reflection.Assembly]::LoadFrom($Path + "\dotNET\WebDriver.dll")
[System.Reflection.Assembly]::LoadFrom($Path + "\dotNET\WebDriver.Support.dll")

$Options = New-Object OpenQA.Selenium.Chrome.ChromeOptions
$Options.BinaryLocation = "C:/Program Files/Google/Chrome/Application/chrome.exe"

$driver = New-Object OpenQA.Selenium.Chrome.ChromeDriver($Path, $Options)

$baseURL = "https://support.sap.com/en/index.html"
$driver.Navigate().GoToUrl($baseURL);
$driver.FindElementByXPath("//section[@id='section_1528579655']/div/div/div/ul/li[3]/div/div/a/span").Click();

$hWin = $driver.WindowHandles[1]
$driver.SwitchTo().Window($hWin)

$driver.FindElementById("j_username").Clear();
$driver.FindElementById("j_username").SendKeys("S0123456789");
$driver.FindElementById("j_password").Clear();
$driver.FindElementById("j_password").SendKeys("secret");
$driver.FindElementById("logOnFormSubmit").Click();

$driver.Close()
$driver.Quit()

#-End-------------------------------------------------------------------

I add code to switch to the next tab, now the script works perfect.

 

If you replay this kind of scripts on the first time, after a recording, it seems good to watch the automated activities carefully. And if the browser opens a new tab at a point where there was none at the recording, it is necessary to add code to switch to the tab.

 

2017/08/16: Here an example with PhantomJS
#-Begin-----------------------------------------------------------------

$Path = "C:\Program Files\Selenium";

[System.Reflection.Assembly]::LoadFrom($Path + "\dotNET\Selenium.WebDriverBackedSelenium.dll");
[System.Reflection.Assembly]::LoadFrom($Path + "\dotNET\WebDriver.dll");
[System.Reflection.Assembly]::LoadFrom($Path + "\dotNET\WebDriver.Support.dll");

$Options = New-Object OpenQA.Selenium.PhantomJS.PhantomJSOptions;

$driver = New-Object OpenQA.Selenium.PhantomJS.PhantomJSDriver($Path, $Options);

$baseURL = "https://support.sap.com/en/index.html";
$driver.Navigate().GoToUrl($baseURL);
$driver.FindElementById("headerLoginLink").Click();
$driver.SwitchTo().Frame("https://support.sap.com/bin/fiji/es/login.support.html?_=nc#https%3A%2F%2Fsupport.sap.com%2Fen%2Findex.html");
$driver.FindElementById("j_username").Clear();
$driver.FindElementById("j_username").SendKeys("S0123456789");
$driver.FindElementById("j_password").Clear();
$driver.FindElementById("j_password").SendKeys("secret");
$driver.FindElementById("logOnFormSubmit").Click();

$SnapShot = $driver.GetScreenshot();
$SnapShot.SaveAsFile($Path + "\Result.jpg", [OpenQA.Selenium.ScreenshotImageFormat]::Jpeg);

$driver.Close();
$driver.Quit();

#-End-------------------------------------------------------------------
Labels in this area