Este documento está diseñado para proporcionarte una introducción completa al framework de pruebas de extremo a extremo Selenium, una herramienta poderosa y fácil de usar para realizar pruebas automatizadas en aplicaciones web modernas. Selenium ofrece una experiencia de usuario excepcional al permitirte escribir pruebas de forma rápida y eficiente mientras proporciona una amplia gama de funcionalidades para garantizar la calidad de tus aplicaciones.
Locating Elements
By ID:
driver.findElement(By.id (<element
ID>))
By Name:
driver.findElement(By.name(<element
name>))
By Class Name:
driver.findElement(By.className
(<element class>))
By Tag Name:
driver.findElement(By.tagName
(<html tag name>))
By CSS Selector:
driver.findElement(By.cssSelector("
Tag#Value of id attribute"))
By XPath:
driver.findElement(By.xpath
(“//input[@type=
'submit']”))
By Link Text:
driver.findElement(By.linkText
(<link text>))
By Partial Link Text:
driver.findElement(By.partialLinkTe
xt (<link text>))
Working with Frames
Switch to a frame by name or ID:
driver.switchTo().frame("buttonframe");
Switch to a frame by index:
driver.switchTo().frame(1);
Switch to a frame using a WebElement:
WebElement iframe =
driver.findElement(By.cssSelector("#modal>iframe"));
driver.switchTo().frame(iframe);
Switch back to the main content:
driver.switchTo().defaultContent();
Working with Windows
Get the current window handle:
String mainWindowHandle = driver.getWindowHandle();
Get all window handles:
import java.util.Set;
Set<String> allWindowHandles = driver.getWindowHandles();
Switch to a specific window:
String windowHandle = driver.getWindowHandle();
driver.switchTo().window(windowHandle);
Switch to newly created window:
driver.switchTo().newWindow(WindowType.TAB);
driver.switchTo().newWindow(WindowType.WINDOW);
Close the current window:
driver.close();
Set window position:
driver.manage().window().setPosition(new Point(0, 0));
Maximize window:
driver.manage().window().maximize();
Minimize window:
driver.manage().window().minimize();
Fullscreen window:
driver.manage().window().fullscreen();
Take a Screenshot:
import org.apache.commons.io.FileUtils;
File scrFile =
((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
FileUtils.copyFile(scrFile, new File("./image.png"));
Working with Files
Upload a file:
driver.findElement(By.id("file-
upload")).sendKeys(“path/to/your/file.txt”);
driver.findElement(By.id("file-submit")).submit();
Read data from a text file - Using BufferedReader:
FileInputStream inputStream = new FileInputStream(“MyFile.txt”);
InputStreamReader reader = new InputStreamReader(inputStream, “UTF-16”);
int character;
while ((character = reader.read()) != -1) {System.out.print((char) character);
}
reader.close();
Using FileReader:
FileReader reader = new FileReader(“MyFile.txt”);
int character;
while ((character = reader.read()) != -1) {
System.out.print((char) character);
}
reader.close();
Read data from a CSV file:
Import au.com.bytecode.opencsv.CSVReader;
String path = “C:\\Users\\Myuser\\Desktop\\csvtest.csv”;
Reader reader = new FileReader(path);
CSVReader csvreader = new CSVReader(reader);
List<String[]> data = csvreader.readAll();
for(String[] d : data){
for(String c : d ){
System.out.println(c);
}
}
Read data from an Excel file:
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
File file = new File(“E:\\TestData\\TestData.xls”);
FileInputStream inputStream = new FileInputStream(file);
HSSFWorkbook wb=new HSSFWorkbook(inputStream);
HSSFSheet sheet=wb.getSheet(“STUDENT_DATA”);
HSSFRow row2=sheet.getRow(1);
HSSFCell cell=row2.getCell(5);
String address= cell.getStringCellValue();
Driver Initialization
Chrome
WebDriver driver = new ChromeDriver();
Firefox
WebDriver driver = new FirefoxDriver();
Edge
WebDriver driver = new EdgeDriver();
Safari
WebDriver driver = new SafariDriver();
Selenium Grid
Start the hub
java -jar selenium-server-standalone-x.y.z.jar -role hub
Start a node
java -jar selenium-server-standalone-x.y.z.jar -role node -hub
http://localhost:4444/grid/register
Server
http://localhost:4444/ui/index.html
Note: Replace "x.y.z" w
Working with Alerts
Switch to an alert:
Alert alert = driver.switchTo().alert();
Enter text in an alert:
alert.sendKeys("Selenium");
Retrieve alert text:
String text = alert.getText();
Selenium Grid
Start the hub
java -jar selenium-server-standalone-x.y.z.jar -role hub
Start a node
java -jar selenium-server-standalone-x.y.z.jar -role node -hub
Server
http://localhost:4444/ui/index.html
Selenium Navigators
Navigate to a URL
driver.get("<URL>") or
driver.navigate().to("<URL>")
Refresh the page
Navigate forward in browser history
Navigate back in browser history
driver.navigate().back()
Mouse Actions
Click:
var actions = new Actions(driver);
actions.Click(element).Perform();
Double click:
actions.DoubleClick(element).Perform();
Right click:
actions.ContextClick(element).Perform();
Drag and drop:
actions.DragAndDrop(sourceElement, targetElement).Perform();
Move to element:
actions.MoveToElement(element).Perform();
JUnit
@Test
Represents the method or class as a test block, also accepts parameters.
@Before
The method with this annotation gets executed before all the other tests.
@BeforeClass
The method with this annotation gets executed once before class.
@After
Will execute before each test method runs.
@AfterClass
The method with this annotation gets executed after all the other tests are executed.
The method with this annotation gets executed after all the other tests are executed.
@Ignore
The method with this annotation gets executed once after class.
@Disabled
Used to disable the tests from execution, but the corresponding reports of the tests are still generated.
TestNG
@BeforeSuite
Will run before the execution of all the test methods in the suite
@BeforeTest
Will execute before the execution of all the test methods of available classes belonging to that folder
@BeforeClass
Will execute before the first method of the current class is invoked
@BeforeMethod
Will execute before each test method runs
@Test
This is the main part of our automation script where we write the business logic we want to automate
@AfterMethod
Will execute after the execution of each test method
@AfterClass
Will execute after the execution of all the test methods of the current class
@AfterTest
Will execute after the execution of all the test methods of available classes belonging to that folder
@AfterSuite
Will execute after the execution of all the test methods in the suite
Selenium Operations
Launch a Webpage:
driver.get("<URL>") or driver.navigate().to("<URL>")
Click a button:
WebElement searchButton = driver.findElement(By.name("btnK"));
searchButton.click();
Print the page title:
String title = driver.getTitle();
System.out.println(title);
Accept an alert pop-up:
driver.switchTo( ).alert( ).accept();
Implicit wait:
import java.util.concurrent.TimeUnit;
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
Explicit wait:
import java.util.concurrent.TimeUnit;
WebElement firstResult = new WebDriverWait(driver,Duration.ofSeconds(10)).until(ExpectedConditions.elementToBeClickable(By.xpath("//a/h3")));
Sleep:
Thread.sleep(<Time in MilliSeconds>);
Clear the input field text:
WebElement searchInput = driver.findElement(By.name("q"));
searchInput.sendKeys("selenium");
searchInput.clear();
Disable a field (set the ‘disabled’ attribute):
((IJavaScriptExecutor)driver).ExecuteScript(“document.querySelector(‘<element_css_selector>’).setAttribute(‘disabled’,”);”);
Enable a field (remove the ‘disabled’ attribute):
((IJavaScriptExecutor)driver).ExecuteScript("document.querySelector('<element_css_selector>').removeAttribute('disabled');");