{"id":14275,"url":"\/distributions\/14275\/click?bit=1&hash=bccbaeb320d3784aa2d1badbee38ca8d11406e8938daaca7e74be177682eb28b","title":"\u041d\u0430 \u0447\u0451\u043c \u0437\u0430\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0442 \u043f\u0440\u043e\u0444\u0435\u0441\u0441\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0440\u043e\u0434\u0430\u0432\u0446\u044b \u0430\u0432\u0442\u043e?","buttonText":"\u0423\u0437\u043d\u0430\u0442\u044c","imageUuid":"f72066c6-8459-501b-aea6-770cd3ac60a6"}

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

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

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

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

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

Интерфейс WebDriver
ChromiumDriver Extending RemoteWebDriver
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-кода для теневого корня ниже:

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

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();

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

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);

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

Статья была взята из этого источника:

0
Комментарии
-3 комментариев
Раскрывать всегда