xpath axes dynamic xpath selenium webdriver
Този урок обяснява оси XPath за динамичен XPath в Selenium WebDriver с помощта на различни използвани оси XPath, примери и обяснение на структурата:
В предишния урок научихме за функциите XPath и неговото значение при идентифицирането на елемента. Когато обаче повече от един елемент имат твърде сходна ориентация и номенклатура, става невъзможно да се идентифицира елементът по уникален начин.
=> Вижте Идеалното ръководство за обучение по селен тук.
Какво ще научите:
Разбиране на оси XPath
Нека разберем гореспоменатия сценарий с помощта на пример.
Помислете за сценарий, при който се използват две връзки с текст „Редактиране“. В такива случаи става уместно да се разбере възловата структура на HTML.
Моля, копирайте и поставете долния код в бележника и го запазете като .htm файл.
Edit Edit
Потребителският интерфейс ще изглежда като екрана по-долу:
Декларация за проблема
как да използвам arrays.sort в java
В # 1) Какво да направя, когато дори XPath функциите не успеят да идентифицират елемента?
Отговор: В такъв случай използваме осите XPath заедно с функциите XPath.
Втората част на тази статия разглежда как можем да използваме йерархичния HTML формат за идентифициране на елемента. Ще започнем с получаване на малко информация за осите XPath.
В # 2) Какво представляват осите XPath?
Отговор: Осите на XPath дефинират набора от възли спрямо текущия (контекстен) възел. Използва се за намиране на възела, който е относително на възела на това дърво.
В # 3) Какво е контекстен възел?
Отговор: Контекстният възел може да бъде дефиниран като възел, който в момента разглежда процесорът XPath.
Различни оси XPath, използвани при тестване на селен
Има тринадесет различни оси, които са изброени по-долу. Въпреки това няма да използваме всички от тях по време на тестване на Селен.
- прародител : Тази ос показва всички предци по отношение на контекстния възел, също достигащ до основния възел.
- предшественик или себе си: Този показва контекстния възел и всички предци по отношение на контекстния възел и включва коренния възел.
- атрибут: Това показва атрибутите на контекстния възел. Може да бъде представен със символа „@“.
- дете: Това показва децата на контекстния възел.
- надолу: Това показва децата и внуците и техните деца (ако има такива) на контекстния възел. Това НЕ указва пространството на атрибутите и имената.
- низходящ или себе си: Това показва контекстния възел и децата, и внуците и техните деца (ако има такива) на контекстния възел. Това НЕ указва атрибута и пространството от имена.
- следното: Това показва всички възли, които се появяват след контекстният възел в HTML DOM структурата. Това НЕ указва низходящо, атрибут и пространство от имена.
- братя и сестри: Това указва всички братя и сестри (същият родител като контекстен възел), които се появи след контекстния възел в структурата на HTML DOM. Това НЕ указва низходящо, атрибут и пространство от имена.
- пространство от имена: Това показва всички възли на пространството от имена на контекстния възел.
- родител: Това показва родителя на контекстния възел.
- предхождащ: Това показва всички възли, които се появяват преди контекстният възел в HTML DOM структурата. Това НЕ указва низходящо, атрибут и пространство от имена.
- предишен брат или сестра: Това показва всички възли на братя и сестри (същия родител като контекстен възел), които се появяват преди контекстният възел в HTML DOM структурата. Това НЕ указва низходящо, атрибут и пространство от имена.
- аз: Това показва контекстния възел.
Структура на оси XPath
Помислете за йерархията по-долу, за да разберете как работят осите XPath.
Вижте по-долу прост HTML код за горния пример. Моля, копирайте и поставете кода по-долу в редактора на бележника и го запазете като .html файл.
Animal
Vertebrate
Fish
Mammal
Herbivore
Carnivore
Lion
Tiger
Other
Invertebrate
Insect
Crustacean
Страницата ще изглежда по-долу. Нашата мисия е да използваме оси XPath, за да намерим уникално елементите. Нека се опитаме да идентифицираме елементите, които са маркирани в диаграмата по-горе. Контекстният възел е 'Бозайник'
# 1) Предшественик
Дневник: За идентифициране на предшествения елемент от контекстния възел.
XPath # 1: // div (@ class = ’Mammal’) / предшественик :: div
XPath “// div (@ class =’ Mammal ’) / ancestor :: div” хвърля два съвпадащи възела:
- Гръбначните, тъй като е родител на „бозайник“, поради което и той се счита за предшественик.
- Животното е родител на родителя на „Бозайник“, поради което се смята за предшественик.
Сега трябва да идентифицираме само един елемент, който е класът „Animal“. Можем да използваме XPath, както е споменато по-долу.
XPath#2: //div(@class='Mammal')/ancestor::div(@class='Animal')
Ако искате да достигнете до текста „Животно“, по-долу XPath може да се използва.
# 2) Предшественик или себе си
Дневник: За идентифициране на контекстния възел и предшествения елемент от контекстния възел.
XPath # 1: // div (@ class = ’Mammal’) / предшественик или самостоятелно :: div
Горният XPath # 1 хвърля три съвпадащи възла:
- Животно (предшественик)
- Гръбначни
- Бозайник (самостоятелно)
# 3) Дете
Дневник: Да се идентифицира детето на контекстния възел „Бозайник“.
XPath # 1: // div (@ class = ’Mammal’) / child :: div
XPath # 1 помага да се идентифицират всички деца на контекстния възел „Бозайник“. Ако искате да получите конкретния дъщерен елемент, моля, използвайте XPath # 2.
XPath # 2: // div (@ class = ’Mammal’) / child :: div (@ class = ’Herbivore’) / h5
# 4) Потомък
Дневник: За идентифициране на децата и внуците на контекстния възел (например: „Animal“).
XPath # 1: // div (@ class = ’Animal’) / низходящ :: div
Тъй като Animal е най-горният член в йерархията, всички дъщерни и потомствени елементи се подчертават. Също така можем да променим контекстния възел за референция и да използваме всеки елемент, който искаме, като възел.
# 5) Потомък или себе си
Дневник: Да намериш самия елемент и неговите потомци.
XPath1: // div (@ class = ’Animal’) / низходящ или самостоятелен :: div
Единствената разлика между низходящ и низходящ или себе си е, че той подчертава себе си в допълнение към подчертаването на потомците.
# 6) Следва
Дневник: За да намерите всички възли, които следват контекстния възел. Тук контекстният възел е div, който съдържа елемента Mammal.
XPath: // div (@ class = ’Mammal’) / след :: div
В следващите оси всички възли, които следват контекстния възел, било то дъщерно или потомствено, се подчертават.
# 7) Следване на брат или сестра
Дневник: За да намерите всички възли след контекстния възел, които споделят един и същ родител и са брат или сестра на контекстния възел.
XPath: // div (@ class = ’Mammal’) / following-sibling :: div
Основната разлика между следващото и следващото братство е, че следващото събрание взема всички братя и сестри след контекста, но също така ще споделя същия родител.
# 8) Предварително
как да стартирам .swf файл
Дневник: Отнема всички възли, които идват преди контекстния възел. Може да е родител или възел на баба и дядо.
Тук контекстният възел е Безгръбначен и подчертаните редове в горното изображение са всички възли, които идват преди Безгръбначния възел.
# 9) Предшестващ брат или сестра
Дневник: За да се намери брат или сестра, който споделя същия родител като контекстния възел и който идва преди контекстния възел.
Тъй като контекстният възел е Безгръбначният, единственият елемент, който се подчертава, е Гръбначният, тъй като тези двама са братя и сестри и споделят един и същ родител ‘Animal’.
# 10) Родител
Дневник: За да намерите родителския елемент на контекстния възел. Ако самият контекстен възел е предшественик, той няма да има родителски възел и няма да извлече съвпадащи възли.
Контекстен възел # 1: Бозайник
XPath: // div (@ class = ’Mammal’) / parent :: div
Тъй като контекстният възел е Mammal, елементът с гръбначни се подчертава, тъй като това е родителят на Mammal.
Контекстен възел # 2: Животно
XPath: // div (@ class = ’Animal’) / родител :: div
Тъй като самият животински възел е предшественик, той няма да откроява нито един възел и следователно не са намерени съвпадащи възли.
# 11) Аз
Дневник: За да се намери контекстният възел, се използва самото.
Контекстен възел: Бозайник
XPath: // div (@ class = ’Mammal’) / self :: div
Както виждаме по-горе, обектът Бозайник е идентифициран уникално. Също така можем да изберем текста „Бозайник, като използваме XPath по-долу.
XPath: // div (@ class = ’Mammal’) / self :: div / h4
Използване на предшестващи и последващи оси
Да предположим, че знаете, че вашият целеви елемент е колко тагове напред или назад от контекстния възел, можете директно да маркирате този елемент, а не всички елементи.
Пример: Предшестващо (с индекс)
Да приемем, че контекстният ни възел е „Друг“ и искаме да достигнем до елемента „Бозайник“, за да използваме подхода по-долу.
Първа стъпка: Просто използвайте предходното, без да давате никаква стойност на индекса.
XPath: // div (@ class = ’Other’) / преди :: div
Това ни дава 6 съвпадащи възли и ние искаме само един насочен възел „Бозайник“.
Втора стъпка: Дайте стойността на индекса (5) на елемента div (чрез преброяване нагоре от контекстния възел).
XPath: // div (@ class = ’Other’) / преди :: div (5)
По този начин елементът „Бозайник“ е идентифициран успешно.
Пример: следване (с индекс)
Да приемем, че контекстният ни възел е „Бозайник“ и искаме да достигнем до елемента „Ракообразни“, за да използваме подхода по-долу.
Първа стъпка: Просто използвайте следното, без да давате никаква стойност на индекса.
XPath: // div (@ class = ’Mammal’) / след :: div
Това ни дава 4 съвпадащи възела и искаме само един насочен възел „Ракообразни“
Втора стъпка: Дайте стойността на индекса (4) на елемента div (бройте напред от контекстния възел).
XPath: // div (@ class = ’Other’) / след :: div (4)
По този начин елементът „Ракообразни“ е идентифициран успешно.
Горният сценарий също може да бъде пресъздаден с предшестващ брат или сестра и братя и сестри чрез прилагане на горния подход.
Заключение
Идентификацията на обект е най-важната стъпка в автоматизацията на всеки уебсайт. Ако можете да придобиете умението да научите обекта точно, 50% от вашата автоматизация е направено. Въпреки че има налични локатори за идентифициране на елемента, има някои случаи, когато дори локаторите не успяват да идентифицират обекта. В такива случаи трябва да прилагаме различни подходи.
Тук използвахме XPath функции и оси XPath, за да идентифицираме уникално елемента.
Завършваме тази статия, като записваме няколко точки, които да запомним:
- Не трябва да прилагате оси „предшественик“ върху контекстния възел на самия контекстен възел е предшественикът.
- Не трябва да прилагате оси „родител“ на контекстния възел на самия контекстен възел е предшественикът.
- Не трябва да прилагате оси „дете“ на контекстния възел на самия контекстен възел е потомъкът.
- Не трябва да прилагате оси „низходящ“ върху контекстния възел на самия контекстен възел е предшественикът.
- Не трябва да прилагате оси „следване“ на контекстния възел, това е последният възел в структурата на HTML документа.
- Не трябва да прилагате „предходни“ оси на контекстния възел, това е първият възел в структурата на HTML документа.
Честито обучение !!!
=> Посетете тук за ексклузивната поредица за обучение по селен.
Препоръчително четене
- Функции XPath за динамичен XPath в селен
- Урок за краставици селен: Интеграция на краставица Java Selenium WebDriver
- Локатори на селен: Идентифициране на уеб елементи с помощта на XPath в селен (примери)
- Въведение в Selenium WebDriver - Урок № 8 за селен
- Урок за ChromeDriver Selenium: Тестове на Selenium Webdriver в Chrome
- Внедряване на нашия първи скрипт за WebDriver - Урок № 10 за Selenium WebDriver
- 30+ най-добри урока за селен: Научете селен с реални примери
- Работа с уеб таблици, рамки и динамични елементи в Selenium Script - Селен Урок # 18