Як працювати з веб-таблицею в Selenium веб-драйвер

Що таке веб-таблиця Selenium?

A Веб-таблиця in Selenium це WebElement, який використовується для табличного представлення даних або інформації. Відображені дані або інформація можуть бути статичними або динамічними. Доступ до веб-таблиці та її елементів можна отримати за допомогою функцій і локаторів WebElement Selenium. Типовим прикладом веб-таблиці можуть бути специфікації продукту, що відображаються на платформі електронної комерції.

Читання веб-таблиці HTML

Бувають випадки, коли нам потрібно отримати доступ до елементів (зазвичай текстів), які знаходяться в таблицях HTML. Однак веб-дизайнер дуже рідко надає ідентифікатор або атрибут імені для певної комірки в таблиці. Тому ми не можемо використовувати звичайні методи, такі як “By.id()”, “By.name()” або “By.cssSelector()”. У цьому випадку найнадійнішим варіантом є доступ до них за допомогою методу “By.xpath()”.

Як працювати з веб-таблицею в Selenium

Розгляньте наведений нижче HTML-код для обробки веб-таблиць Selenium.

Як написати XPath для Table в Selenium

Ми будемо використовувати XPath щоб отримати внутрішній текст комірки, що містить текст «четверта комірка».

Як написати XPath для Table в Selenium

Крок 1 – Установіть батьківський елемент (таблиця)

Локатори XPath у WebDriver завжди починаються з подвійної скісної риски «//», а потім іде батьківський елемент. Оскільки ми маємо справу з веб-таблицями в Selenium, батьківський елемент завжди має бути тег. Перша порція нашого Selenium Тому локатор таблиці XPath має починатися з “//table”.

Selenium Приклад веб-таблиці

Крок 2 – Додайте дочірні елементи

Елемент безпосередньо під є тому ми можемо це сказати є «дитиною» від . І також, є «батьком» для . Усі дочірні елементи в XPath розміщуються праворуч від батьківського елемента, відокремлюючись однією косою рискою «/», як у коді, показаному нижче.

Selenium Приклад веб-таблиці

Крок 3 – Додавання предикатів

The елемент містить два теги. Тепер ми можемо сказати, що ці двоє теги є «дочірніми» для . Відповідно, ми можемо так сказати є батьком обох елементів.

Інше, що ми можемо зробити висновок, це те, що два елементи є братами і сестрами. Брати і сестри відносяться до дочірніх елементів, які мають одного батька.

Щоб дістатися до ми хочемо отримати доступ (той, що має текст «четверта комірка»), ми повинні спочатку отримати доступ до другий і не перший. Якщо ми просто напишемо “//table/tbody/tr”, тоді ми отримаємо доступ до першого тег.

Отже, як нам отримати доступ до другого потім? Відповідь на це питання - використовувати Предикати.

Предикати — це числа або атрибути HTML, укладені в пару квадратних дужок «[]», які відрізняють дочірній елемент від його братів і сестер. Оскільки нам потрібно отримати доступ до другого, ми будемо використовувати «[2]» як предикат.

Selenium Приклад веб-таблиці

Якщо ми не будемо використовувати жодного предиката, XPath отримає доступ до першого брата. Тому ми можемо отримати доступ до першого використовуючи будь-який із цих кодів XPath.

Selenium Веб-таблиця за допомогою Xpath

Крок 4 – Додайте наступні дочірні елементи за допомогою відповідних предикатів

Наступний елемент, до якого нам потрібно отримати доступ, це другий . Застосовуючи принципи, які ми навчилися під час кроків 2 і 3, ми завершимо наш код XPath, щоб він був схожий на показаний нижче.

Веб-таблиця в Selenium за допомогою Xpath

Тепер, коли у нас є правильний локатор XPath, ми вже можемо отримати доступ до потрібної комірки та отримати її внутрішній текст за допомогою наведеного нижче коду. Передбачається, що ви зберегли наведений вище HTML-код як «newhtml.html» на своєму диску C.

Веб-таблиця в Selenium за допомогою Xpath

public static void main(String[] args) {
	String baseUrl = "http://demo.guru99.com/test/write-xpath-table.html";
	WebDriver driver = new FirefoxDriver();

	driver.get(baseUrl);
	String innerText = driver.findElement(
		By.xpath("//table/tbody/tr[2]/td[2]")).getText(); 	
        System.out.println(innerText); 
	driver.quit();
	}
}

Веб-таблиця в Selenium за допомогою Xpath

Доступ до вкладених таблиць

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

Як отримати доступ до вкладених таблиць у Selenium

Щоб отримати доступ до комірки з текстом «4-5-6» за допомогою «//батька/дочірнього» та концепцій предикату з попереднього розділу, ми повинні мати змогу створити код XPath нижче.

Як отримати доступ до вкладених таблиць у Selenium


Наведений нижче код WebDriver повинен мати можливість отримати внутрішній текст комірки, до якої ми маємо доступ.

Доступ до вкладених таблиць у Selenium

public static void main(String[] args) {
	String baseUrl = "http://demo.guru99.com/test/accessing-nested-table.html";
	WebDriver driver = new FirefoxDriver();

	driver.get(baseUrl);
	String innerText = driver.findElement(
		By.xpath("//table/tbody/tr[2]/td[2]/table/tbody/tr/td[2]")).getText(); 		
        System.out.println(innerText); 
	driver.quit();
}

Наведені нижче результати підтверджують успішний доступ до внутрішньої таблиці.

Доступ до вкладених таблиць у Selenium

Використання атрибутів як предикатів

Якщо елемент записаний глибоко в коді HTML так, що дуже важко визначити номер для предикату, ми можемо використати замість цього унікальний атрибут цього елемента.

У наведеному нижче прикладі клітинка «З Нью-Йорка до Чикаго» розташована глибоко всередині Mercury HTML-код домашньої сторінки Tours.

Selenium Приклад веб-таблиці з використанням атрибутів як предикатів

Selenium Приклад веб-таблиці з використанням атрибутів як предикатів

У цьому випадку ми можемо використовувати унікальний атрибут таблиці (width=”270″) як предикат. Атрибути використовуються як предикати, додаючи перед ними символ @. У наведеному вище прикладі комірка «З Нью-Йорка до Чикаго» розташована в першій четвертого , тому наш XPath має бути таким, як показано нижче.

Selenium Приклад веб-таблиці з атрибутами як предикатами

Пам’ятайте, що коли ми додаємо код XPath Java, ми маємо використовувати зворотну скісну риску «\» для подвійних лапок з обох сторін «270», щоб рядковий аргумент By.xpath() не завершувався передчасно.

Selenium Приклад веб-таблиці з атрибутами як предикатами

Тепер ми готові отримати доступ до цієї комірки за допомогою наведеного нижче коду.

Selenium Приклад веб-таблиці з атрибутами як предикатами

public static void main(String[] args) {
	String baseUrl = "http://demo.guru99.com/test/newtours/";
	WebDriver driver = new FirefoxDriver();

	driver.get(baseUrl);
	String innerText = driver.findElement(By
		.xpath("//table[@width=\"270\"]/tbody/tr[4]/td"))
		.getText(); 		
	System.out.println(innerText); 
	driver.quit();
}

Selenium Приклад веб-таблиці з атрибутами як предикатами

Комбінація клавіш: Використовуйте Перевірити елемент для доступу до таблиць Selenium

Якщо номер або атрибут елемента надзвичайно важко або неможливо отримати, найшвидший спосіб згенерувати код XPath — це використовувати Inspect Element.

Розглянемо наведений нижче приклад із Mercury Домашня сторінка турів.

Selenium Приклад веб-таблиці з атрибутами як предикатами

крок 1

Використовуйте Firebug, щоб отримати код XPath.

Selenium Приклад веб-таблиці з атрибутами як предикатами

крок 2

Знайдіть перший батьківський елемент таблиці та видаліть усе, що знаходиться ліворуч від нього.

Selenium Приклад веб-таблиці з атрибутами як предикатами

крок 3

До решти частини коду додайте подвійну скісну риску «//» і скопіюйте її у свій код WebDriver.

Selenium Приклад веб-таблиці з атрибутами

Наведений нижче код WebDriver зможе успішно отримати внутрішній текст елемента, до якого ми маємо доступ.

Selenium Приклад веб-таблиці з атрибутами

public static void main(String[] args) {
	String baseUrl = "http://demo.guru99.com/test/newtours/";
	WebDriver driver = new FirefoxDriver();

	driver.get(baseUrl);
	String innerText = driver.findElement(By
		.xpath("//table/tbody/tr/td[2]"
		+ "//table/tbody/tr[4]/td/"
		+ "table/tbody/tr/td[2]/"
		+ "table/tbody/tr[2]/td[1]/"
		+ "table[2]/tbody/tr[3]/td[2]/font"))
		.getText(); 		
	System.out.println(innerText); 
	driver.quit();
}

Підсумки

  • By.xpath() зазвичай використовується для доступу до елементів WebTable в Selenium.
  • Якщо елемент записаний глибоко в коді HTML так, що дуже важко визначити число, яке потрібно використовувати для предикату, ми можемо використати унікальний атрибут цього елемента замість Selenium отримати елемент таблиці.
  • Атрибути використовуються як предикати, додаючи перед ними символ @.
  • Використовуйте Inspect Element для доступу до WebTable Selenium