Как да боравим с уеб таблицата в Selenium WebDriver

Съдържание:

Anonim

Четене на HTML уеб таблица

Има моменти, когато трябва да получим достъп до елементи (обикновено текстове), които са в HTML таблиците. Много рядко обаче уеб дизайнерът предоставя атрибут id или name на определена клетка в таблицата. Следователно не можем да използваме обичайните методи като "By.id ()", "By.name ()" или "By.cssSelector ()". В този случай най-надеждният вариант е достъпът до тях чрез метода "By.xpath ()".

В този урок ще научите -

  • Как да напиша XPath за таблица
  • Достъп до вложени таблици
  • Използване на атрибути като предикати
  • Преки пътища: Използвайте Inspect Element за достъп до таблици в селен

Как да напиша XPath за таблица

Помислете за HTML кода по-долу.

Ще използваме XPath, за да получим вътрешния текст на клетката, съдържащ текста „четвърта клетка“.

Стъпка 1 - Задайте родителския елемент (таблица)

Локаторите на XPath в WebDriver винаги започват с двойна наклонена черта "//" и след това последвана от родителския елемент . Тъй като имаме работа с таблици, родителският елемент винаги трябва да е тагът

. Следователно първата част от нашия локатор XPath трябва да започне с "// таблица".

Стъпка 2 - Добавете дъщерните елементи

Елементът непосредствено под

е , така че можем да кажем, че е "детето" на
. И също така,
е "родителят" на . Всички дъщерни елементи в XPath са поставени вдясно от своя родителски елемент, разделени с една наклонена черта "/" като кода, показан по-долу.

Стъпка 3 - Добавяне на предикати

Елементът

съдържа два маркера . Сега можем да кажем, че тези два маркера са "деца" на . Следователно можем да кажем, че е родител и на двата елемента .

Друго нещо, което можем да заключим, е, че двата елемента

са братя и сестри. Братя и сестри се отнасят до дъщерни елементи със същия родител .

За да стигнем до

, а не до първия. Ако просто напишем "// table / tbody / tr", тогава ще имаме достъп до първия таг.

И така, как да осъществим достъп до втория

тогава? Отговорът на това е да се използват предикати .

Предикатите са числа или HTML атрибути, затворени в двойка квадратни скоби "[]", които отличават дъщерния елемент от неговите братя и сестри . Тъй като

, до който имаме нужда, е вторият, ще използваме "[2]" като предикат.

Ако не използваме предикат, XPath ще осъществи достъп до първия брат или сестра. Следователно можем да осъществим достъп до първия

, използвайки някой от тези XPath кодове.

Стъпка 4 - Добавете следващите дъщерни елементи, като използвате подходящите предикати

Следващият елемент, до който трябва да получим достъп, е вторият

и затова нашият XPath трябва да бъде както е показано по-долу.

Не забравяйте, че когато поставяме XPath кода в Java, трябва да използваме наклонената черта назад \ "за двойните кавички от двете страни на" 270 ", така че аргументът на низа на By.xpath () да не бъде прекратен преждевременно .

Вече сме готови за достъп до тази клетка, като използваме кода по-долу.

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

Преки пътища: Използвайте Inspect Element за достъп до таблици в селен

Ако номерът или атрибутът на елемент е изключително труден или невъзможен за получаване, най-бързият начин за генериране на XPath кода е използването на Inspect Element.

Помислете за примера по-долу от началната страница на Mercury Tours.

Етап 1

Използвайте Firebug, за да получите XPath кода.

Стъпка 2

Потърсете първия родителски елемент "таблица" и изтрийте всичко вляво от него.

Стъпка 3

Префиксирайте останалата част от кода с двойна наклонена черта "//" и го копирайте във вашия код на WebDriver.

Кодът на WebDriver по-долу ще може успешно да извлече вътрешния текст на елемента, до който имаме достъп.

публична статична void main (String [] args) {String baseUrl = "http://demo.guru99.com/test/newtours/";Драйвер за WebDriver = нов FirefoxDriver ();driver.get (baseUrl);Низ innerText = driver.findElement (От.xpath ("// таблица / tbody / tr / td [2]"+ "// таблица / tbody / tr [4] / td /"+ "таблица / 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 кода, така че числото, което да се използва за предиката, е много трудно да се определи, вместо това можем да използваме уникалния атрибут на този елемент.
  • Атрибутите се използват като предикати, като се добавят с префикс със символа @.
  • Използвайте Inspect Element за достъп до таблици в селен
, до който желаем достъп (този с текст "четвърта клетка"), първо трябва да осъществим достъп до втория
. Прилагайки принципите, които сме научили от стъпки 2 и 3, ние ще финализираме нашия XPath код, като този, показан по-долу.

Сега, когато разполагаме с правилния локатор на XPath, вече можем да осъществим достъп до клетката, която искахме, и да получим нейния вътрешен текст, използвайки кода по-долу. Предполага се, че сте запазили HTML кода по-горе като "newhtml.html" във вашия C диск.

публична статична void main (String [] args) {String baseUrl = "http://demo.guru99.com/test/write-xpath-table.html";Драйвер за WebDriver = нов FirefoxDriver ();driver.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 по-долу трябва да може да извлече вътрешния текст на клетката, до която имаме достъп.

публична статична void main (String [] args) {String baseUrl = "http://demo.guru99.com/test/accessing-nested-table.html";Драйвер за WebDriver = нов FirefoxDriver ();driver.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") като предикат. Атрибутите се използват като предикати, като се добавят с префикс със символа @ . В горния пример клетката "Ню Йорк до Чикаго" се намира в първата

на четвъртата