How to verify click to call browser functionality with selenium webdriver - c#

I have a webpage where it contains 1300 number and i just need to verify that once i click on that link then it will open browser Popup window and i can capture the details from that popup and verify test is passed.
I need to do it for Website . Please help me with how to verify that popup.

Follow these steps:
1.Store window handle id of first window.
2.Store collecion of link elements
3.Iterate the collection
3.1 Click the element
3.2 Find the new window
3.3 Switch to the new window
3.4 Assert content
3.5 Switch back to the window handle id of first window (which is store at #1)
See example here

Its very simple
Create driver object
var IEBrowser = new InternetExplorerDriver();
Open URL
ActionHelper.Timeout_Code(() => IEBrowser.Navigate().GoToUrl(URLTOWEBSITE), 15000, () => IEBrowser.Navigate().GoToUrl(URLTOWEBSITE));
Verify Popup page by selecting any control from popup.

Related

What is the difference between WebDriver.SwitchTo().Window() and WebDriver.SwitchTo().Frame()

A few days ago, I had the requirement to make my WebDriver(Chromedriver in that case) switch between 2 tabs on my browser (One of which has been automatically opened by clicking a link).
I was able to implement a solution using the following lines (C#)
var tabs = new List<String>(Driver.WindowHandles);
//Switches to the first tab
Driver.SwitchTo().Window(tabs[0]);
However, I recently came across some implementations that use frames and alerts, which confused me.
The documentation has not been very helpful to me as I still have trouble figuring out use cases for each.
Could you please enlighten me what the difference between Frame and Window is for that purpose ( performance, reliability, cross-platform,... )?
Frame :
is a tag in HTML. However The tag is not supported in HTML5.
The <frame> tag defines one particular window (frame) within a <frameset>
Normally, You must have seen Iframe in DOM. It's basically section of a HTML page.
Moreover, If you want to interact any element which is inside a frame , You will have to switch to frame.
How :
SwitchTo().Frame(int frameIndex) : using index
SwitchTo().Frame(IWebElement frameElement) : Select a frame using its previously located OpenQA.Selenium.IWebElement.
SwitchTo().Frame(string frameName) : Select a frame by its name.
Windows :
When you click on any any link and a new tab opens or a new windows itself open that's a window in Selenium.
How : You have already mentioned that in your Post.
Hope this'll be helpful.
In Selenium, Window can be different Tab in same browser instance or different browser instance. The context of switch to window is multiple pages or browser instance.
Frame inside web page, so the context of switch to frame is one Page, not multiple pages or browser instances.
Window Object
The Window Object represents an open window in a browser.
If a document contain frames ( tags), the browser creates one Window Object for the HTML document and one additional window object for each of the frame it contains.
As per the WebDriver W3C Editor's Draft WebDriver commands happen in the context of either the current browsing context or the current top-level browsing context.
Driver.SwitchTo().Window(windowHandle)
The current top-level browsing context is represented in the protocol by its associated window handle. A top-level browsing context can be selected using the Switch To Window command as follows :
Driver.SwitchTo().Window(windowHandle)
Driver.SwitchTo().Frame(frameReference)
Similarly, a specific browsing context can be selected using the Switch to Frame command.
Driver.SwitchTo().Frame(driver.FindElement(By.XPath("//iframe[contains(#src,'<src_attribute_value>')]")));

Automating 'To' from Contacts List Gmail

When you compose an e-mail in Gmail, to send the email to people on your Contacts list you have to click 'To' which leads you to a pop-up box. Is there a way to automate the closing of this box? I'm using Selenium and C#.
I think you're likely running into problems because that modular window is within an iFrame, and you need to tell Selenium to specifically look into that iFrame before searching.
See handling-iframes-using-selenium-webdriver.
Unfortunately, Google seems to assign a new ID to this iframe every time it's created, so you can't rely on that, so you'll need to create an IWebElement for the iframe element and pass it into the .SwithTo().Frame() call.
Specifically, you could try this (I tested this out, and it worked for me).
//Get iFrame element and switch to it.
IWebElement selectContactFrame= driver.FindElement(By.CssSelector("iframe.KA-JQ"));
driver.SwitchTo().Frame(selectContactFrame);
//Find cancel button and click it.
IWebElement cancelButton = driver.FindElement(By.XPath("//div[text()='Cancel']"));
cancelButton.Click();

Selenium webdriver in c#-Unable click on hyperlink on frame

I am doing automation using selenium Webdriver in c#.So in my application, after clicking on one link, there is frame opened on top of main browser window
So i am able to read text on that frame, in short i can switch to that frame.
Frame having many hyperlink, and i have to click on hyperlink named "Add/Change Admin Message". But i uses below code to click on link but it is scrolling down the frame in IE browser so click action is not performed.But its works fine in chrome browser.
Driver.FindElement(By.XPath("//a[contains(text(),'"+"Add/Change Admin Message"+"')]")).Click();
I have tried with xpath,cssselector,classname,Id,linktext,partial link text but no luck.
Below is the DOM for that link, please help me ..
Add/Change Admin Message
First, you need to switch to the frame where the link is:
Driver.SwitchTo().Frame("frame name or id");
Then, you can locate the link by partial link text:
Driver.FindElement(By.PartialLinkText("Add/Change Admin Message"));
With IE it is often something magical you should do, try clicking the link via javascript:
IWebElement link = Driver.FindElement(By.PartialLinkText("Add/Change Admin Message"));
IJavaScriptExecutor js = Driver as IJavaScriptExecutor;
js.ExecuteScript("arguments[0].click();", link);

Navigate driver to new opened window in selenium with C#

I wrote a simple code to submit a sign up form with Selenium. Before submit, driver should come from home page to sign up page.
var firefox = new FirefoxDriver();
firefox.Navigate().GoToUrl("http://mywebsite/home");
If I print firefox.Title, it shows me title of home page currectly
And in home page, there is a sign-up button. Sign up button link is bellow.
<a target="_blank" href="SignUp.jsp">Register Here</a>
To navigate to sign up page, I wrote a line:
firefox.FindElement(By.CssSelector("a[href='SignUp.jsp']")).Click();
After this, driver shows me the sign up page in new window of firefox browser. To navigate driver to the sign up I wrote firefox.Navigate();
Now If I print firefox.Title, it shows me title of home page again.
Please help me to find out problem. Thanks in advance.
You pretty much grabbing the same title since the you never switched to newly opened window
// Get the current window handle so you can switch back later.
string currentHandle = driver.CurrentWindowHandle;
// Find the element that triggers the popup when clicked on.
IWebElement element = driver.FindElement(By.XPath("//*[#id='webtraffic_popup_start_button']"));
// The Click method of the PopupWindowFinder class will click
// the desired element, wait for the popup to appear, and return
// the window handle to the popped-up browser window. Note that
// you still need to switch to the window to manipulate the page
// displayed by the popup window.
PopupWindowFinder finder = new PopupWindowFinder(driver);
string popupWindowHandle = finder.Click(element);
driver.SwitchTo().Window(popupWindowHandle);
// Do whatever you need to on the popup browser, then...
driver.Close();
driver.SwitchToWindow(currentHandle);
And, after switching to new window you should get new title.
However, this window handles process is utterly confusing to me. Selenium .Net bindings provide PopupWindowFinder class to handle windows.
Gratitude to JimEvans for his nice works and this
Use
firefox.SwitchTo().Window(handle);
where handle is one of instances found in firefox.WindowHandles. This will switch between the different window instances. You can find more information in the docs for IWebDriver.SwitchTo().

WatiN: MsHtmlBrowser will not TypeText

From the WatiN website:
// Open a new Internet Explorer window and
// goto the google website.
IE ie = new IE("http://www.google.com");
// Find the search text field and type Watin in it.
ie.TextField(Find.ByName("q")).TypeText("WatiN");
// Click the Google search button.
ie.Button(Find.ByValue("Google Search")).Click();
// Uncomment the following line if you want to close
// Internet Explorer and the console window immediately.
//ie.Close();
The above sample works just fine. However, since I do not want to open up a browser window, I modified the above code to use MsHtmlBrowser:
// goto the google website.
var ie = new MsHtmlBrowser();
ie.GoTo("http://www.google.com");
// Find the search text field and type Watin in it.
ie.TextField(Find.ByName("q")).TypeText("WatiN");
// Click the Google search button.
ie.Button(Find.ByValue("Google Search")).Click();
The TypeText line is throwing an exception. Any idea what's wrong?
The MsHtmlBrowser is only there to find elements and read their attribute values. There is no support for clicking a link, typing text, firing events, no session state or any other way of interact like with a normal browser. So us it for scrapping only.
HTH,
Jeroen

Categories

Resources