Справочник Selenium Java

Я пишу эту статью, чтобы поделиться общими фрагментами кода автоматизации Selenium. Надеюсь, что этот источник станет служить вам справочником, на который можно ссылаться, когда вы добавляете несколько новых скриптов в свою существующую среду автоматизации или готовитесь к собеседованию.

1. Декларация WebDriver

System.setProperty(“webdriver.chrome.driver”, “/Users/username/Downloads”);
WebDriver driver = new ChromeDriver();

Вы можете узнать здесь, зачем нам нужен вышеуказанный код. Делюсь несколькими скриншотами ниже для лучшего понимания.

Справочник Selenium Java
Интерфейс WebDriver
Справочник Selenium Java
ChromiumDriver Extending RemoteWebDriver
Справочник Selenium Java
RemoteWebDriver, реализующий метод get

2. Поиск элементов

Ниже приведён HTML-код для одного текстового поля ввода:

<input type="text" id="first_name" name="first_name" class="first_name input mb1" placeholder="First Name">

a. Поиск по ID:

driver.findElement(By.Id("first-name"));

b. Поиск по Xpath:

driver.findElement(By.xpath("//input[@name='first_name']"));

c. Поиск по CSS-селекторам:

driver.findElement(By.cssSelector("input.first_name"));

d. Поиск по классу:

 driver.findElement(By.className(".first_name"));

e. Поиск по тегу:

driver.findElement(By.tagName("input"));

f. Поиск по Name:

driver.findElement(By.name("first_name"));

g. Поиск гиперссылок:

Пожалуйста, найдите HTML-элемент ниже:

<a class="jfHeader-menuListLink" href="https://phptravels.com/demo" xpath="1">Demo Here</a>

i. Текст ссылки

driver.findElement(By.linkText("Demo Here"));

ii. Частичный текст ссылки

driver.findElement(By.partialLinkText("Demo"));

3. Выпадающий список, флажки и переключатели

a. Выпадающий список статического одиночного выбора

Пожалуйста, найдите HTML-код для статического выпадающего списка ниже:

  <h3>Dropdown List</h3>
  <select id="dropdown">
    <option value="" disabled="disabled" selected="selected">
      Please select an option </option>
    <option value="1">Option 1</option>
    <option value="2">Option 2</option>
  </select>

Ознакомьтесь с фрагментом кода Selenium ниже:

import org.openqa.selenium.support.ui.Select;

Select option = new Select(driver.findElement(By.id("dropdown")));
option.selectByIndex(1);

b.Статический выпадающий список с несколькими вариантами выбора

Пожалуйста, найдите HTML-код для статического выпадающего списка с несколькими вариантами выбора ниже:

<h3>Dropdown List</h3>
  <select multiple="" id="options">
    <option value="1">Option 1</option>
    <option value="2">Option 2</option>
    <option value="3">Option 3</option>
    <option value="4">Option 4</option>
  </select>

Пожалуйста, ознакомьтесь с фрагментом кода Selenium ниже:

import org.openqa.selenium.support.ui.Select;

Select options = new Select(driver.findElement(By.id("options")));
options.selectByVisibleText("Option 1");
options.selectByIndex(1);

Существует несколько способов выбора статического выпадающего списка с одним или несколькими вариантами выбора, которые приведены ниже:

  • selectByIndex(int IndexOfElement)
  • selectByValue(String Value)
  • selectByVisibleText(String Text)

Существует несколько способов отменить выбор статического выпадающего списка с одним или несколькими вариантами выбора, которые приведены ниже:

  • deselectByIndex(int IndexOfElement)
  • deselectByValue(String Value)
  • deselectByVisibleText(String Text)

e. Флажки

Пожалуйста, найдите HTML-код для флажков ниже:

<h2 style="text-align: left;">
Check Boxes</h2>
My favourite colors are:<br />
<input name="color" type="checkbox" value="red" />
Red<br />
<input name="color" type="checkbox" value="yellow" />
Yellow<br />
<input name="color" type="checkbox" value="blue" />
Blue<br />
<input name="color" type="checkbox" value="orange" />
Orange<br />
<input name="color" type="checkbox" value="green" />
Green<br />
<input name="color" type="checkbox" value="purple" /> 
Purple<br />

Пожалуйста, найдите фрагмент кода Selenium для флажков ниже:

WebElement redColor = driver.findElement(By.xpath("//input[@value='red']")); 
redColor.click(); 

f. Кнопка переключения

Пожалуйста, ознакомьтесь с HTML-кодом ниже:

<h2 style="text-align: left;">
Radio Buttons</h2>
<div>
Your current web browser is:<br />
<input checked="" name="browser" type="radio" value="IE" />
Internet Explorer<br />
<input name="browser" type="radio" value="Mozilla" />
Mozilla<br />
<input name="browser" type="radio" value="Opera" />
Opera<br />
<br /></div>

Пожалуйста, ознакомьтесь с фрагментом кода Selenium для переключателей ниже:

driver.findElement(By.xpath("//input[@value='Mozilla']")).click(); 

4. Ожидание

a. Неявное ожидание

WebDriver driver = new FirefoxDriver();
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(10));
driver.get("http://somedomain/url_that_delays_loading");
WebElement myDynamicElement = driver.findElement(By.id("myDynamicElement"));

b. Явное ожидание

WebDriver driver = new ChromeDriver();
driver.get("https://google.com/ncr");
driver.findElement(By.name("q")).sendKeys("cheese" + Keys.ENTER);
// Initialize and wait till element(link) became clickable - timeout in 10 seconds
WebElement firstResult = new WebDriverWait(driver, Duration.ofSeconds(10))
        .until(ExpectedConditions.elementToBeClickable(By.xpath("//a/h3")));
// Print the first result
System.out.println(firstResult.getText());

Пожалуйста, обратите внимание, что не следует смешивать неявные и явные ожидания. Это может привести к непредсказуемому времени ожидания. Например, установка неявного ожидания в 10 секунд и явного ожидания в 15 секунд может привести к возникновению тайм-аута через 20 секунд.

c. Свободное ожидание

// Waiting 30 seconds for an element to be present on the page, checking
// for its presence once every 5 seconds.
Wait<WebDriver> wait = new FluentWait<WebDriver>(driver)
  .withTimeout(Duration.ofSeconds(30))
  .pollingEvery(Duration.ofSeconds(5))
  .ignoring(NoSuchElementException.class);

WebElement foo = wait.until(driver -> {
  return driver.findElement(By.id("foo"));
});

5. Работа с различными окнами

  • Чтобы получить дескриптор текущего окна — driver.getWindowHandle()
  • Чтобы получить все дескрипторы окна — driver.getWindowHandles()

6. Класс действий

a. Действие мыши

  • click() — Щёлкает по текущему местоположению курсора
  • DoubleClick() — Двойной щелчок по текущему местоположению курсора
  • contextClick() — Щелчок правой кнопкой мыши по текущему местоположению курсора
  • DragAndDrop(источник WebElement, цель WebElement) — Перетаскивает элемент из одного местоположения в другое
  • moveToElement(цель WebElement) — Перемещает элемент

b. Действие с клавиатуры

  • keyUp(WebElement target, java.lang.CharSequence key) — освобождает ключ после фокусировки на целевом элементе
  • keyDown(WebElement target, java.lang.CharSequence key) — выполняет нажатие клавиши после фокусировки на целевом элементе
  • SendKeys(WebElement target, java.lang.CharSequence… keys) — вводит последовательность клавиш

Фрагмент кода Selenium:

i. Пример сочетания действий

Actions builder = new Actions(driver);

Action seriesOfActions = builder
 .moveToElement(textField)
 .click()
 .keyDown(txtUsername, Keys.SHIFT)
 .sendKeys(txtUsername, "testingbot")
 .keyUp(txtUsername, Keys.SHIFT)
 .doubleClick(txtUsername)
 .contextClick()
 .build();
 
seriesOfActions.perform();

ii. Пример перетаскивания

Actions action = new Actions(driver);

action.dragAndDrop(Sourcelocator, Destinationlocator).build().perform();

7. Теневой корневой элемент

Пожалуйста, найдите изображение HTML-кода для теневого корня ниже:

Справочник Selenium Java

Пожалуйста, найдите приведённый ниже код, с помощью которого мы можем проверить в консоли, правильна ли наша стратегия поиска или нет:

document.querySelector('#container').shadowRoot.querySelector('h1#inside')

Пожалуйста, найдите фрагмент кода Selenium для теневого корневого селектора:

 public WebElement getRootElement(WebElement element) {
    WebElement shadowRootElement = (WebElement) ((JavascriptExecutor) driver)
                      .executeScript("return arguments[0].shadowRoot",element);
    return shadowRootElement;
 }

 WebElement shadowRoot1 = getRootElement(driver.findElement(By.id("container")));

 WebElement mainElement = shadowRoot1.findElement(By.id("inside"));

8. Захват скриншота

Пожалуйста, найдите фрагмент кода selenium ниже, чтобы сделать снимок экрана и скопировать его по определённому пути

import java.io.File;
import org.apache.commons.io.FileUtils;

TakesScreenshot scrShot =((TakesScreenshot)webdriver);
File SrcFile=scrShot.getScreenshotAs(OutputType.FILE);

//Move image file to new destination
File DestFile=new File(fileWithPath);
//Copy file at destination
FileUtils.copyFile(SrcFile, DestFile);

9. Загрузка файла

Пожалуйста, ознакомьтесь с фрагментом кода selenium для загрузки файла ниже:

import java.util.concurrent.TimeUnit;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import io.github.bonigarcia.wdm.WebDriverManager;

class fileUploadDoc{
 public static void main(String[] args) {
  WebDriverManager.chromedriver().setup();
  WebDriver driver = new ChromeDriver();
  driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
  driver.get("https://the-internet.herokuapp.com/upload");

  //We want to import selenium-snapshot file. 
  driver.findElement(By.id("file-upload")).sendKeys("selenium-snapshot.jpg");
  driver.findElement(By.id("file-submit")).submit();
  if(driver.getPageSource().contains("File Uploaded!")) {
   System.out.println("file uploaded");
  }
  else{
    System.out.println("file not uploaded");
   }
  driver.quit();
 }
}

10. Действия с клавиатуры

a. Использование класса действий

 Keys cmdCtrl = Platform.getCurrent().is(Platform.MAC) ? Keys.COMMAND : Keys.CONTROL;

        WebElement textField = driver.findElement(By.id("textInput"));
        new Actions(driver)
                .sendKeys(textField, "Selenium!")
                .sendKeys(Keys.ARROW_LEFT)
                .keyDown(Keys.SHIFT)
                .sendKeys(Keys.ARROW_UP)
                .keyUp(Keys.SHIFT)
                .keyDown(cmdCtrl)
                .sendKeys("xvv")
                .keyUp(cmdCtrl)
                .perform();

        Assertions.assertEquals("SeleniumSelenium!", textField.getAttribute("value"));

Также существует нечто, называемое классом Robot. Оно хорошо подходит для обработки собственных всплывающих окон, таких как загрузка файла. Вы можете обратиться к этой статье для получения дополнительной информации.

11. Таблицы

Таблица в основном состоит из заголовка, строк и табличных данных.

Пожалуйста, обратитесь к этому веб-сайту для получения примера таблицы.

a. Чтобы получить все заголовки таблиц

//By this we will get an idea of column numbers as well
driver.findElements(By.cssSelector("table>thead>tr>th"));

b. Чтобы получить отдельный элемент строки

//We will have to change the nth-child(row_number) accordingly
driver.findElement(By.cssSelector("tbody>tr:nth-child(2)"));

c. Чтобы получить все элементы строки

//By this we will get all the row elements
driver.findElements(By.cssSelector("tbody>tr"));

d. Для получения значений отдельных табличных данных

//By this we will get all the table data elements of the first row
driver.findElements(By.cssSelector("table>tbody>tr:nth-child(1)>td"));

Чтобы получить значения отдельных ячеек, нам придётся выполнить итерацию по элементам строки, а затем получить доступ к отдельным элементам данных таблицы и сохранить их в хэш-карте.

12. Некоторые общие операции с использованием Selenium

a. Режим “В полный экран”

driver.manage().window().maximize();  

b. Сворачивание окна

driver.manage().window().minimize();

Ниже приведены различные методы, доступные в “окне”:

Справочник Selenium Java

c. Использование файлов cookie

i. Добавление файла cookie

driver.manage().addCookie(new Cookie("session-id", "1234-5678"));

ii. Получение всех файлов cookie

driver.manage().getCookies();

iii. Получение файла cookie с именем ‘session-id’

driver.manage().getCookieNamed("session-id");

iv. Удаление файла cookie с именем ‘session-id’

driver.manage().deleteCookieNamed("session-id");

v. Удаление всех файлов cookie

driver.manage().deleteAllCookies();

d. Чтобы выйти/закрыть браузер

i. driver.close() — закрывает текущее окно браузера, в котором выполняются автоматические скрипты

ii. driver.quit() — закрывает все окно браузера

13. Обработка фреймов

Пожалуйста, ознакомьтесь с HTML-кодом ниже:

<div id="modal">
  <iframe id="buttonframe" name="myframe"  src="https://seleniumhq.github.io">
   <button>Click here</button>
 </iframe>
</div>

a. driver.switchTo.frame(int frameNumber) — указав номер индекса фрейма, драйвер переключится на него

// Switches to the second frame
driver.switchTo().frame(1);

b. driver.switchTo.frame(строка frameNameOrID) — при упоминании элемента фрейма или идентификатора драйвер переключится на этот конкретный фрейм

//Using the ID
driver.switchTo().frame("buttonframe");

//Or using the name instead
driver.switchTo().frame("myframe");

//Now we can click the button
driver.findElement(By.tagName("button")).click();

c. driver.switchTo.frame(WebElement frameElement) — при упоминании веб-элемента фрейма драйвер переключится на этот конкретный фрейм

//Store the web element
WebElement iframe = driver.findElement(By.cssSelector("#modal>iframe"));

//Switch to the frame
driver.switchTo().frame(iframe);

//Now we can click the button
driver.findElement(By.tagName("button")).click();

d. driver.switchTo().defaultContent() — возврат к главному окну

// Return to the top level
driver.switchTo().defaultContent();

14. Обработка оповещений

a. Для обработки простых оповещений нажмите кнопку “OK”

//Click the link to activate the alert
driver.findElement(By.linkText("See an example alert")).click();

//Wait for the alert to be displayed and store it in a variable
Alert alert = wait.until(ExpectedConditions.alertIsPresent());

//Store the alert text in a variable
String text = alert.getText();

//Press the OK button
alert.accept();

б. Обработка оповещений с помощью кнопок ‘OK’ и ‘Cancel’

//Click the link to activate the alert
driver.findElement(By.linkText("See a sample confirm")).click();

//Wait for the alert to be displayed
wait.until(ExpectedConditions.alertIsPresent());

//Store the alert in a variable
Alert alert = driver.switchTo().alert();

//Store the alert in a variable for reuse
String text = alert.getText();

//Press the Cancel button
alert.dismiss();

c. Для отправки символов во всплывающее окно с предупреждением

//Click the link to activate the alert
driver.findElement(By.linkText("See a sample prompt")).click();

//Wait for the alert to be displayed and store it in a variable
Alert alert = wait.until(ExpectedConditions.alertIsPresent());

//Type your message
alert.sendKeys("Selenium");

//Press the OK button
alert.accept();

Вы можете ознакомиться с подсказками на этой странице.

15. Разные фрагменты Selenium

a. Обработка ненадёжных сертификатов

  //Create instance of ChromeOptions Class
  ChromeOptions handlingSSL = new ChromeOptions();

  //Using the setAcceptInsecureCerts method with true as parameter to accept the untrusted certificate
  handlingSSL.setAcceptInsecureCerts(true);
    
  //Creating instance of Chrome driver by passing the desied reference of ChromeOptions object
  WebDriver driver = new ChromeDriver(handlingSSL);

b. Желаемые возможности

FirefoxOptions browserOptions = new FirefoxOptions();
browserOptions.setPlatformName("Windows 10");
browserOptions.setBrowserVersion("92");
Map<String, Object> cloudOptions = new HashMap<>();
cloudOptions.put("build", myTestBuild);
cloudOptions.put("name", myTestName);
browserOptions.setCapability("cloud:options", cloudOptions);
WebDriver driver = new RemoteWebDriver(new URL(cloudUrl), browserOptions);

Ссылки на рекомендуемые источники:

i. https://www.selenium.dev/

ii. https://www.lambdatest.com/

iii. https://stackoverflow.com/questions/70974631/what-is-the-difference-between-chromedriver-driver-new-chromedriver-and-web#:~:text=Using%20WebDriver%20driver%20%3D%20new%20ChromeDriver,casting%20it%20to%20ChromeDriver%20Class.

iv. https://www.edureka.co/community/817/confused-betwen-java-awt-robot-selenium-actions#:~:text=There%20are%20plenty%20of%20differences,control%20keyboard%20and%20mouse%20operations.

+1
0
+1
1
+1
1
+1
0
+1
0

Ответить

Ваш адрес email не будет опубликован. Обязательные поля помечены *