Рубрики
Без рубрики

Как Получить Текст Элемента В Selenium?

Selenium – наиболее широко используемый инструмент автоматизированного тестирования, который эффективно сокращает человеческие усилия… Помеченный как selenium, java, автоматизация.

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!

This text will be hidden

В приведенном выше коде текст внутри тега 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);
          List opt = 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”