Apply POM to FramesAndWindows

This commit is contained in:
Ramon Caballero 2024-07-25 20:08:01 +01:00
parent 0701dd75f0
commit a41d058e0a
5 changed files with 178 additions and 97 deletions

View File

@ -0,0 +1,31 @@
package pages.webelements;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.PageFactory;
public class Frame
{
@FindBy(id = "frame-button")
private WebElement button;
private WebDriver driver = null;
public Frame(WebDriver driver, WebElement frame)
{
this.driver = driver;
PageFactory.initElements(this.driver, this);
driver.switchTo().frame(frame);
}
public void clickButton()
{
button.click();
}
public void dismiss()
{
driver.switchTo().defaultContent();
}
}

View File

@ -0,0 +1,41 @@
package pages.webelements;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.PageFactory;
public class FramesAndWindowsPage
{
@FindBy(xpath = "//button[contains(text(),'Frames and Windows')]")
private WebElement accordionItem;
@FindBy(id = "custom-iframe")
private WebElement frame;
@FindBy(id = "new-window-button")
private WebElement newWindowButton;
private WebDriver driver = null;
public FramesAndWindowsPage(WebDriver driver)
{
this.driver = driver;
PageFactory.initElements(this.driver, this);
}
public void clickOnAccordionItem()
{
accordionItem.click();
}
public WebElement frame()
{
return frame;
}
public void clickNewWindowButton()
{
newWindowButton.click();
}
}

View File

@ -0,0 +1,64 @@
package pages.webelements;
import java.util.Set;
import org.openqa.selenium.WebDriver;
public class NewWindow
{
private static void sleep(long milliseconds)
{
try
{
Thread.sleep(milliseconds);
} catch (InterruptedException e)
{
e.printStackTrace();
}
}
private String originalWindowHandle;
private WebDriver driver = null;
public NewWindow(WebDriver driver)
{
this.driver = driver;
// Get the handle (or identifier) of the original window:
originalWindowHandle = driver.getWindowHandle();
// Most likely the new window won't finish loading its content before its title is queried by the
// driver, so we sleep the execution a little bit to give it enough time:
sleep(500);
// Get the handles of all the windows (i.e. handle of the original window + handle of the new window):
Set<String> windowHandles = driver.getWindowHandles();
// Figure out the handle of the new window:
String newWindowHandle = "";
for (String windowHandle : windowHandles)
{
if (!originalWindowHandle.contentEquals(windowHandle))
{
newWindowHandle = windowHandle;
break;
}
}
// Switch to the new window:
driver.switchTo().window(newWindowHandle);
}
public String title()
{
return driver.getTitle();
}
public void close()
{
driver.close();
driver.switchTo().window(originalWindowHandle);
}
}

View File

@ -0,0 +1,42 @@
package tests.webelements;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import pages.webelements.Frame;
import pages.webelements.FramesAndWindowsPage;
import pages.webelements.NewWindow;
public class FramesAndWindowsTests
{
public static void main(String[] args)
{
// Specify path to WebDriver:
System.setProperty("webdriver.gecko.driver", "/snap/bin/geckodriver");
// Launch browser and navigate to test page:
WebDriver driver = new FirefoxDriver();
driver.manage().window().maximize();
driver.get("https://ramoncaballero.dev/sdet/selenium-webdriver/playgrounds/");
// Instantiate the page model:
FramesAndWindowsPage page = new FramesAndWindowsPage(driver);
// Perform actions on the page:
page.clickOnAccordionItem();
Frame frame = new Frame(driver, page.frame());
frame.clickButton();
frame.dismiss();
page.clickNewWindowButton();
NewWindow window = new NewWindow(driver);
System.out.println("The title of the new window is: " + window.title());
window.close();
//
// This is commented out so you can actually see what happened in the web page:
// driver.quit();
}
}

View File

@ -1,97 +0,0 @@
package webelements;
import java.util.Set;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
public class FramesAndWindows
{
private static void sleep(long milliseconds)
{
try
{
Thread.sleep(milliseconds);
}
catch (InterruptedException e)
{
e.printStackTrace();
}
}
public static void main(String[] args)
{
// Specify path to WebDriver:
System.setProperty("webdriver.gecko.driver", "/snap/bin/geckodriver");
// Launch browser and navigate to test page:
WebDriver driver = new FirefoxDriver();
driver.manage().window().maximize();
driver.get("https://ramoncaballero.dev/sdet/selenium-webdriver/playgrounds/");
// Click on the 'Frames and Windows' accordion item:
driver.findElement(By.xpath("//button[contains(text(),'Frames and Windows')]")).click();
//
// FRAMES
//
// Switch to the iframe:
WebElement frame = driver.findElement(By.id("custom-iframe"));
driver.switchTo().frame(frame);
// Perform the actions we need to do:
driver.findElement(By.id("frame-button")).click();
// Switch back to the default document:
driver.switchTo().defaultContent();
//
// WINDOWS
//
// Get the handle (or identifier) of the original window:
String originalWindowHandle = driver.getWindowHandle();
// Click the button that opens a new window:
driver.findElement(By.id("new-window-button")).click();
// Most likely the new window won't finish loading its content before its title is queried by the
// driver, so we sleep the execution a little bit to give it enough time:
sleep(500);
// Get the handles of all the windows (i.e. handle of the original window + handle of the new window):
Set<String> windowHandles = driver.getWindowHandles();
// Figure out the handle of the new window:
String newWindowHandle = "";
for (String windowHandle : windowHandles)
{
if (!originalWindowHandle.contentEquals(windowHandle))
{
newWindowHandle = windowHandle;
break;
}
}
// Switch to the new window:
driver.switchTo().window(newWindowHandle);
// Perform the actions we need to do:
System.out.println("The title of the new window is: " + driver.getTitle());
// Close the window:
driver.close();
// Switch back to the default document:
driver.switchTo().window(originalWindowHandle);
//
// This is commented out so you can actually see what happened in the web page:
// driver.quit();
}
}