Selenium – наиболее широко используемый инструмент автоматизированного тестирования, который сокращает человеческие усилия и эффективно справляется с тестированием сценариев, с которыми мы сталкиваемся каждый день. Один из таких сценариев заключается в том, как получить текст элемента в Selenium. Selenium предлагает метод getText(), используемый для получения текста элемента, т.Е. Его можно использовать для чтения текстовых значений элемента с веб-страницы.
В этой статье мы разберемся, как получить текст элемента с помощью метода getText(), предлагаемого Selenium WebDriver. Мы поймем, как мы можем извлекать текст с веб-страницы, который может присутствовать в любом веб-элементе. Мы изучим различные приложения метода getText(), и к концу этой статьи вы будете полностью способны проверять текст или даже читать и выполнять действия с текстом с помощью Selenium WebDriver .
Для начала давайте определимся с терминами:
Что Такое Метод getText()?
Интерфейс Selenium WebDriver предопределил метод getText(), который помогает извлекать текст для определенного веб-элемента. Этот метод получает видимый внутренний текст (который не скрыт CSS) веб-элемента.
Давайте подробно ознакомимся с этими терминами один за другим:
Внутренний Текст
Внутренний текст относится к тексту, который появляется между открытием и закрытием любого тега. Например, рассмотрим приведенный ниже фрагмент HTML-кода:
Let us begin!
Hello World..
Сохранение приведенного выше кода в формате HTML (.html-файл) откроет окно с содержимым, подобным приведенному ниже:
Итак, вот текст, давайте начнем! Привет, мир .., и Нажмите на меня! – это тексты, которые находятся между тегами выше. Следовательно, это внутренние тексты .
Не Скрыт CSS
Есть еще одна вещь, упомянутая в приведенном выше определении, т.Е. не скрытая CSS. Давайте и это поймем. Рассмотрим следующий фрагмент HTML-кода-
Let us begin!
В приведенном выше коде текст внутри тега span не будет виден в пользовательском интерфейсе, так как он скрыт CSS.
Теперь, когда вы знаете, что означает innertext и hidden с помощью CSS, давайте повторим наше определение, в котором говорится, что метод Gettext() в Selenium извлекает внутренний текст элемента, который не скрыт CSS, и возвращает его в виде строкового значения. Проще говоря, все, что отображается в браузере в виде текста, будет возвращено как есть методом getText(). Если текст, соответствующий веб-элементу, отсутствует, возвращается пустая строка.
До сих пор мы видели, как получить текст элемента с веб-страницы. Давайте теперь начнем с практического применения метода getText().
Использование Метода getText() Для Получения Заголовка Или Параграф
Мы все знаем, что ни один веб-сайт не является полным без заголовков или содержания абзацев. Иногда возникает необходимость проверить текст на веб-странице, на которую мы переходим. Метод getText() в Selenium помогает нам извлекать текст и выполнять с ним необходимые действия. В приведенном ниже коде мы считываем текст заголовка с веб-страницы, сравниваем его с ожидаемым значением, а затем печатаем результаты. Мы будем использовать этот демонстрационный веб-сайт , чтобы попрактиковаться в этом примере автоматизации здесь.
package getText; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; import org.testng.annotations.AfterTest; import org.testng.annotations.BeforeTest; import org.testng.annotations.Test; public class TextThruHeading { WebDriver driver; @BeforeTest public void setUp(){ System.setProperty("webdriver.chrome.driver","E:\\Softwares\\chromedriver.exe"); driver = new ChromeDriver(); } @Test public void headingText(){ driver.get("https://phptravels.com/demo/"); driver.manage().window().maximize(); String expectedHeading = "APPLICATION TEST DRIVE"; //Storing the text of the heading in a string String heading = driver.findElement(By.xpath("//div[@class='text']//h2")).getText(); if(expectedHeading.equalsIgnoreCase(heading)) System.out.println("The expected heading is same as actual heading --- "+heading); else System.out.println("The expected heading doesn't match the actual heading --- "+heading); } @AfterTest public void tearDown(){ driver.quit(); } }
Запустив приведенный выше код, вы увидите результаты, как показано ниже-
Аналогичным образом вы можете записать XPath любого элемента абзаца и получить текст для того же самого.
Использование Метода getText() Для Получения Выпадающего Текста
Есть несколько случаев, когда нам нужно выбрать определенное выпадающее значение или, возможно, получить текстовые значения в выпадающем списке. Мы также можем использовать метод getText() для обработки таких сценариев. Теперь мы посмотрим, как мы можем получить значения в выпадающем списке и распечатать их в консоли. Чтобы запустить скрипт для выпадающего списка, мы использовали этот демонстрационный веб-сайт .
package getText; import java.util.List; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.chrome.ChromeDriver; import org.openqa.selenium.support.ui.Select; import org.testng.annotations.AfterTest; import org.testng.annotations.BeforeTest; import org.testng.annotations.Test; public class TextThruDropdown { WebDriver driver; @BeforeTest public void setUp(){ System.setProperty("webdriver.chrome.driver","E:\\Softwares\\chromedriver.exe"); driver = new ChromeDriver(); } @Test public void headingText(){ driver.get("https://demoqa.com/select-menu"); driver.manage().window().maximize(); // Working on the third dropdown, viz, Old Style Select menu WebElement drpdn = driver.findElement(By.id("oldSelectMenu")); System.out.println("Clicking on the drop down"); Select se = new Select(drpdn); Listopt = se.getOptions(); System.out.println("The total number of options in the dropdown is : " +opt.size()); //Iterate through the list of options System.out.println("The dropdown values are--- "); for(WebElement options : opt){ System.out.println(options.getText()); } } @AfterTest public void tearDown(){ driver.quit(); } }
При выполнении кода мы увидим результаты печати значений содержимого выпадающего списка-
Использование Метода getText() Для Получения Текста Предупреждения
Так же, как абзац и выпадающий список, можно также извлечь текст предупреждения. Оповещения являются общими для многих приложений, и, следовательно, может возникнуть необходимость проверить текст, присутствующий в нем. Приведенный ниже код извлечет текст из предупреждения и распечатает его для этого демонстрационного веб-сайта .
package getText; import org.openqa.selenium.Alert; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.chrome.ChromeDriver; import org.testng.annotations.AfterTest; import org.testng.annotations.BeforeTest; import org.testng.annotations.Test; public class AlertText { WebDriver driver; @BeforeTest public void setUp(){ System.setProperty("webdriver.chrome.driver","E:\\Softwares\\chromedriver.exe"); driver = new ChromeDriver(); } @Test public void alertText(){ driver.get("https://demoqa.com/alerts"); driver.manage().window().maximize(); driver.findElement(By.id("confirmButton")).click(); String txt = driver.switchTo().alert().getText(); System.out.println("The text is - " +txt); } @AfterTest public void tearDown(){ driver.quit(); } }
Запустите код и увидите, что текст, присутствующий в предупреждении, печатается в окне консоли.
Как Получить Нулевые Или Пустые Текстовые Значения С Помощью Метода getText()?
Могут быть случаи, когда ваш веб-элемент вообще не содержит текстового значения. Как вы думаете, что произойдет, если мы применим метод getText() к такому элементу? Как уже было сказано в начале, взамен мы получим пустую строку. Давайте посмотрим на пример:
Мы подобрали изображение заголовка, на котором нет соответствующего текста, и мы будем использовать метод getText() для элемента. Вы увидите, что пустая строка возвращается на консоль без какой-либо ошибки.
Код будет выглядеть следующим образом-
package getText; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.chrome.ChromeDriver; import org.testng.annotations.AfterTest; import org.testng.annotations.BeforeTest; import org.testng.annotations.Test; public class NullText { WebDriver driver; @BeforeTest public void setUp(){ System.setProperty("webdriver.chrome.driver","E:\\Softwares\\chromedriver.exe"); driver = new ChromeDriver(); } @Test public void headingText(){ driver.get("https://demoqa.com"); driver.manage().window().maximize(); WebElement ele = driver.findElement(By.xpath("//header//img")); System.out.println("The header text is - " +ele.getText()); } @AfterTest public void tearDown(){ driver.quit(); } }
При выполнении приведенного выше кода вы увидите результаты в консоли с инструкцией print, показывающей пустую строку, возвращаемую методом getText().
Разница Между getText() И getAttribute() В Selenium WebDriver
Люди обычно часто путаются между методами gettext и getAttribute. Обратите внимание, что оба этих метода совершенно разные и возвращают разные значения.
Метод getText()
Метод getText() возвращает видимый внутренний текст веб-элемента. Вы можете обратиться к любому из приведенных выше примеров, чтобы получить представление о методе getText().
Метод getAttribute()
С другой стороны, метод getAttribute() извлекает значение атрибута, который мы хотим получить. Давайте рассмотрим метод getAttribute() на примере выполнения:
На изображении выше мы можем видеть множество атрибутов во входном теге, таких как id, type, class и placeholder. Метод getAttribute() извлекет значение, соответствующее атрибуту, который мы передаем в качестве аргумента. Давайте посмотрим на это с помощью кода-
package getText; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; import org.testng.annotations.AfterTest; import org.testng.annotations.BeforeTest; import org.testng.annotations.Test; public class GetAttribute { WebDriver driver; @BeforeTest public void setUp(){ System.setProperty("webdriver.chrome.driver","E:\\Softwares\\chromedriver.exe"); driver = new ChromeDriver(); } @Test public void attributeText(){ driver.get("https://www.lambdatest.com/"); driver.manage().window().maximize(); // This line would store the attribute value as String variable String attributeValue = driver.findElement(By.id("useremail")).getAttribute("placeholder"); System.out.println("The value is - " + attributeValue); } @AfterTest public void tearDown(){ driver.quit(); } }
При выполнении кода вы можете видеть, что печатается значение атрибута Placeholder.
Метод getText() Vs. Метод getAttribute()
Предположим, у нас есть следующий HTML-компонент:
https://www.lambdatest.com/
Теперь в этом HTML-компоненте, если мы используем метод getText(), мы получим значение
"https://www.lambdatest.com/" // Below code will give https://www.lambdatest.com/ as output driver.findElement(By.name("Title")).getText();
И если мы используем метод getAttribute() для получения значения атрибута "value"
, мы получим "LambdaTest"
.
// Below code will give LambdaTest as output driver.findElement(By.name("Title")).getAttribute("value");
Хотя оба этих значения являются строковыми, оба они совершенно разные.
Поэтому мы в основном используем метод Gettext() для получения внутреннего текста HTML-тега и метод getAttribute() для получения значения атрибута атрибута-заполнителя.
Мы надеемся, что теперь вам ясно, как получить текст элемента в Selenium, и разница между методами Gettext() и getAttribute(), и вы понимаете, какой метод где использовать.
Выполняйте Свои Тесты Параллельно, Используя Лямбда-Тест Selenium Grid
Когда вы работаете над автоматизацией, вам приходится выполнять свои тесты в нескольких браузерах одновременно. Lambda Test предлагает вам платформу для выполнения кроссбраузерного тестирования с тем же кодом в их Selenium grid. Все, что вам нужно сделать, это настроить некоторые свойства в вашем коде, подключиться к узлу lambda grid, используя свое имя пользователя и ключ доступа в качестве переменных.
Давайте теперь посмотрим, как получить текст элемента в Selenium с помощью параллельных тестов. Вам нужно просто отредактировать код в вашем методе BeforeTestmethod, и ваш код будет выглядеть следующим образом-
package getText; import java.net.MalformedURLException; import java.net.URL; import org.openqa.selenium.remote.DesiredCapabilities; import org.openqa.selenium.remote.RemoteWebDriver; import org.testng.annotations.AfterTest; import org.testng.annotations.BeforeTest; import org.testng.annotations.Test; public class TestClass { public String username = "YOUR_USERNAME"; public String accesskey = "YOUR_ACCESS_KEY"; public static RemoteWebDriver driver = null; public String gridURL = "@hub.lambdatest.com/wd/hub"; boolean status = false; @BeforeTest public void setUp(){ //You need to set desired capabilities which you can generate from Capability Generator from Lambda Test as per your requirements DesiredCapabilities capabilities = new DesiredCapabilities(); capabilities.setCapability("browserName", "chrome"); capabilities.setCapability("version", "81.0"); capabilities.setCapability("platform", "win10"); // If this cap isn't specified, it will get any available one capabilities.setCapability("build", "LambdaTestProject"); capabilities.setCapability("name", "LambdaTestGetTextProject"); capabilities.setCapability("network", true); // Enables network logs capabilities.setCapability("visual", true); // Enables step by step screenshot capabilities.setCapability("video", true); // Enables video recording capabilities.setCapability("console", true); // Captures console logs try { driver = new RemoteWebDriver(new URL("https://" + username + ":" + accesskey + gridURL), capabilities); } catch (MalformedURLException e) { System.out.println("Invalid grid URL"); } catch (Exception e) { System.out.println(e.getMessage()); } } @Test public void testMethod(){ driver.get("https://www.lambdatest.com/"); driver.manage().window().maximize(); System.out.println("The title of the page is - "+driver.getTitle()); } @AfterTest public void tearDown(){ driver.quit(); } }
При запуске теста вы увидите результаты выполнения в меню автоматизации лямбда-тестирования со всеми подробностями:
Сделав это, теперь вы сможете выполнять кроссбраузерное параллельное тестирование с использованием Lambda Test Grid и быть еще более эффективными при выполнении.
Заканчиваем С Этим!
Мы надеемся, что теперь вы разобрались с методом getText() и сможете легко использовать его при автоматизированном тестировании. Вы также можете использовать платформу тестирования Lambda для выполнения интерактивного и автоматизированного Кроссбраузерного тестирования в более чем 2000 реальных браузерах и операционных системах онлайн.
Если у вас есть какие-либо проблемы или вопросы, не стесняйтесь обращаться к нам через раздел комментариев ниже. Счастливого тестирования!
Оригинал: “https://dev.to/paulharshit/how-to-get-text-of-an-element-in-selenium-55dp”