Як обробляти веб-таблицю в Selenium WebDriver

Зміст:

Anonim

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

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

У цьому посібнику ви дізнаєтесь-

  • Як написати XPath для таблиці
  • Доступ до вкладених таблиць
  • Використання атрибутів як предикатів
  • Ярлик: Використовуйте елемент перевірки для доступу до таблиць у селені

Як написати XPath для таблиці

Розгляньте HTML-код нижче.

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

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

Локатори XPath у WebDriver завжди починаються з подвійної косої риски "//", а потім за батьківським елементом . Оскільки ми маємо справу з таблицями, батьківським елементом завжди повинен бути тег

. Отже, перша частина нашого локатора XPath повинна починатися з "// таблиці".

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

Елемент безпосередньо під

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

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

Елемент

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

Ще можна зробити висновок, що два елементи

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

Щоб дістатися до

, а не до першого. Якщо ми просто напишемо "// table / tbody / tr", то ми отримаємо доступ до першого тегу .

Отже, як тоді отримати доступ до другого

? Відповідь на це - використання предикатів .

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

, до якого нам потрібен доступ, є другим, ми будемо використовувати "[2]" як предикат.

Якщо ми не використовуємо жоден предикат, XPath отримає доступ до першого брата. Тому ми можемо отримати доступ до першого

, використовуючи будь-який із цих кодів XPath.

Крок 4 - Додайте наступні дочірні елементи, використовуючи відповідні предикати

Наступним елементом, до якого нам потрібно отримати доступ, є другий

, і тому наш XPath повинен бути таким, як показано нижче.

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

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

public static void main (String [] args) {Рядок baseUrl = "http://demo.guru99.com/test/newtours/";Драйвер WebDriver = новий FirefoxDriver ();драйвер.get (baseUrl);Рядок innerText = driver.findElement (Автор.xpath ("// таблиця [@width = \" 270 \ "] / tbody / tr [4] / td")).getText ();System.out.println (innerText);driver.quit ();}

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

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

Розглянемо приклад нижче із домашньої сторінки Mercury Tours.

Крок 1

Використовуйте Firebug для отримання коду XPath.

Крок 2

Шукайте перший батьківський елемент "таблиця" і видаліть все ліворуч від нього.

Крок 3

Залиште частину коду префіксом подвійною косою рискою "//" та скопіюйте її у свій код WebDriver.

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

public static void main (String [] args) {Рядок baseUrl = "http://demo.guru99.com/test/newtours/";Драйвер WebDriver = новий FirefoxDriver ();драйвер.get (baseUrl);Рядок innerText = driver.findElement (Автор.xpath ("// таблиця / tbody / tr / td [2]"+ "// стіл / tbody / tr [4] / td /"+ "table / tbody / tr / td [2] /"+ "стіл / tbody / tr [2] / td [1] /"+ "таблиця [2] / tbody / tr [3] / td [2] / шрифт")).getText ();System.out.println (innerText);driver.quit ();}

Резюме

  • By.xpath () зазвичай використовується для доступу до елементів таблиці.
  • Якщо елемент записаний глибоко в HTML-коді, так що номер, який використовуватиметься для предиката, дуже важко визначити, ми можемо замість нього використовувати унікальний атрибут цього елемента.
  • Атрибути використовуються як предикати, ставлячи їх перед символом @.
  • Використовуйте контрольний елемент для доступу до таблиць у селені
, до якого ми хочемо отримати доступ (до тексту з текстом "четверта комірка"), спочатку потрібно отримати доступ до другого
. Застосовуючи принципи, яких ми вивчили з кроків 2 і 3, ми доопрацюємо наш код XPath таким, як показано нижче.

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

public static void main (String [] args) {Рядок baseUrl = "http://demo.guru99.com/test/write-xpath-table.html";Драйвер WebDriver = новий FirefoxDriver ();драйвер.get (baseUrl);Рядок innerText = driver.findElement (By.xpath ("// table / tbody / tr [2] / td [2]")). GetText ();System.out.println (innerText);driver.quit ();}}

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

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

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

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

public static void main (String [] args) {Рядок baseUrl = "http://demo.guru99.com/test/accessing-nested-table.html";Драйвер WebDriver = новий FirefoxDriver ();драйвер.get (baseUrl);Рядок innerText = driver.findElement (By.xpath ("// table / tbody / tr [2] / td [2] / table / tbody / tr / td [2]")). GetText ();System.out.println (innerText);driver.quit ();}

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

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

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

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

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

четвертої