Савладавање КСПатх-а у Селену: Како лоцирати елементе

Тест инжењери су од суштинског значаја у животном циклусу развоја софтвера јер обезбеђују да тим испоручује апликације без грешака и које раде. Ови инжењери пролазе апликације кроз различите тестове пре него што се могу испоручити или прогласити спремним за кориснике.

Тестатори треба да буду вешти и способни да лоцирају веб елементе и комуницирају са њима. Селен је један од најчешће коришћених алата за аутоматизацију тестирања од стране савремених развојних тимова. Овај алат има четири компоненте; Селениум Грид, Селениум ВебДривер, Селениум ИДЕ и Селениум РЦ.

Наш фокус данас ће бити на Селениум ВебДривер-у, јер садржи КСПатх. Овај чланак ће дефинисати КСПатх, расправљати о основној КСПатх синтакси и илустровати како се КСПатх користи у Селену.

Шта је КСПатх

КСПатх (КСМЛ Патх Лангуаге) је језик упита за одабир и навигацију атрибута и елемената унутар КСМЛ докумената. КСПатх дефинише израз путање, нудећи начин за адресирање одређених делова КСМЛ документа и преузимање информација из њега.

Његова синтакса личи на путању система датотека. Такође садржи функције и симболе који олакшавају избор елемената на основу њихових атрибута и хијерархије. Можете да користите КСПатх са технологијама као што су КСМЛ, ХТМЛ и КССЛТ да бисте издвојили и манипулисали подацима.

Зашто користити КСПатх?

  • Флексибилан је: за разлику од ЦСС селектора који могу да лоцирају елементе само користећи назив ознаке, ИД или класу, КСПатх вам омогућава да лоцирате елементе користећи друге атрибуте.
  • Вишекратна употреба: Можете да складиштите свој КСПатх у променљиве и да их поново користите у свом коду.
  • Прецизан избор чворова: КСПатх обезбеђује стандардизован начин циљања одређених елемената у веб документу.

Основна синтакса КСПатх-а

КСПатх вам омогућава да пронађете било који елемент на веб страници користећи ДОМ. Међутим, пре него што проверимо синтаксу, морамо да разумемо следеће КСПатх изразе;

ЕкпрессионДесцриптионноденаме/ тагнамеБира све чворове име ‘ноденаме’/ ‘тагнаме’/Изабире из основног чвора// Бира чворове у тренутном документу из тренутног чвора који одговара селекцији, без обзира на то где се налазе@Изабир атрибута. тренутни чвор. Бира тренутни чвор

Стандардна синтакса за КСПатх је;

XPath=//tagname[@attribute="value"]

Као што видите, синтакса почиње двоструком косом цртом (//), која почиње тренутним чвором како је дефинисано ознаком/именом чвора.

Апсолутни КСПатх у односу на релативни КСПатх

Имамо два пута када се бавимо КСПатх-ом; Апсолутни КСПатх и релативни КСПатх;

Абсолуте КСПатх

Апсолутни КСПатх је директан пут од корена до жељеног елемента. Почињете са основним чвором и завршавате са циљним чвором.

Можете имати ХТМЛ документ са следећим садржајем;

<!DOCTYPE html>
<html>
<head>
    <title>techblog.co.rs</title>
</head>
<body>
    <div>
        <h1>Welcome to techblog.co.rs</h1>
    </div>
</body>
</html>

Ако желимо да лоцирамо елемент са садржајем „Добро дошли у вдзвдз“, следићете ову путању;

/html/body/div/h1

У горњем документу имамо;

  • хтмл као основни чвор: /хтмл
  • Тело је родитељски чвор: /хтмл/боди
  • Див као дете чвора тела: /хтмл/боди/див
  • Х1 као дете див чвора: /хтмл/боди/див/х1

Да бисте добили најдубљи елемент, морате следити тај пут.

Када користити Абсолуте КСПатх

Апсолутни КСПатх прати ‘специфичан’ пут. Стога ће се савршено уклапати када имате више елемената са сличним атрибутима на страници, осигуравајући да циљате тачне елементе у документу.

Међутим, КСПатх је превише осетљив на промене у структури ХТМЛ документа. Као таква, једноставна промена може да поквари ваш Апсолутни КСПатх.

Релативни КСПатх

Релативни КСПатх почиње од било ког чвора и завршава се са циљним чвором. На ову путању не утичу промене у документу, што га чини пожељнијим у већини случајева. Са Релативе КСПатх, можете лоцирати елементе из било ког дела документа. Релативни КСПатх израз почиње двоструким косим цртама ‘//’.

Ако користимо ХТМЛ документ, можемо да лоцирамо наш Х1 који каже „Добро дошли у вдзвдз“;

<!DOCTYPE html>
<html>
<head>
    <title>techblog.co.rs</title>
</head>
<body>
    <div>
        <h1>Welcome to techblog.co.rs</h1>
    </div>
</body>
</html>

Наш релативни КСПатх за х1 ће бити;

//body/div/h1

Када користити релативни КСПатх

Требало би да користите Релативе КСПатх када тражите равнотежу између флексибилности и специфичности. Ова путања је отпорна на промене у ХТМЛ документу, с обзиром на то да однос између елемената остаје специфичан.

Пронађите елементе користећи КСПатх у Селену

Селен је оквир отвореног кода који омогућава корисницима да аутоматизују веб претраживаче. Оквир има колекцију библиотека и алата који помажу тестерима да аутоматски и систематски комуницирају са веб елементима.

Под претпоставком да имамо веб документ који садржи листу песама као што следи;

<!DOCTYPE html>
<html>
<head>
    <title>Song Library</title>
</head>
<body>
    <h1>Song Library</h1>
    <ul class="song-list">
        <li class="song" title="Song Title 1">Song 1 - Artist 1</li>
        <li class="song" title="Song Title 2">Song 2 - Artist 2</li>
        <li class="song" title="Song Title 3">Song 3 - Artist 1</li>
        <li class="song" title="Song Title 4">Song 4 - Artist 3</li>
    </ul>
</body>
</html>
  • Наш основни чвор је <хтмл>.
  • Имамо <боди> као наш родитељски чвор.
  • Имамо <х1> као дете <боди>.
  • Имамо <ул> као дете <боди>.
  • Имамо <ли> као дете <ул>.

Можемо користити различите КСПатх локаторе у горњем ХТМЛ документу. На пример, можемо да лоцирамо елементе по ИД-у, имену, имену класе, садржају, тексту, завршава-са и почиње-са, међу многим другим локаторима. Можете користити Селениум са различитим програмским језицима. Користићемо Питхон за демонстрацију.

Пронађите по индексу

Под претпоставком да желимо да лоцирамо песму број 3, можемо имати овај код;

third_song = driver.find_element_by_xpath("//li[@class="song"][3]")
print("Third Song:", third_song.text)

Користили смо релативни КСПатх и почели са ‘ли’ чвором. Када Селенијум пронађе трећу песму на нашој листи, штампаће њен текст.

Пронађите по атрибуту

Можемо имати КСПатх који тражи све песме из „Артист 1” и штампа њихове наслове. Наш код може бити следећи;

songs_by_artist1 = driver.find_elements_by_xpath("//li[contains(@class, 'song') and contains(text(), 'Artist 1')]")
print("Songs by Artist 1:")
for song in songs_by_artist1:
    print(song.text)

Пронађи по тексту

Овај локатор вам помаже да пронађете елементе са одређеним текстом. Можемо потражити песму са текстом „Песма 4“ и одштампати њен текст. Можемо представити овај локатор користећи овај код;

song_with_text = driver.find_element_by_xpath("//li[contains(text(), 'Song 4')]")
print("Song with Text:", song_with_text.text)

КСПатх Акес

Приступи о којима смо до сада разговарали савршено функционишу са једноставним веб страницама. Међутим, постоје случајеви у којима методе претраживања КСПатх елемената као што су текст, ИД, назив класе и назив неће радити.

КСПатх осе се користе за динамички садржај где нормални локатори не раде. Овде лоцирате елементе на основу њиховог односа са другим елементима. Ово су неки од уобичајених КСПатх Акес локатора;

Предак

Метода Анцестор Акис је савршена за рад са КСМЛ документима са високо угнежђеним елементима. Можете да изаберете све елементе претка као што су бака и деда и родитељ тренутног чвора од најближег до најудаљенијег.

Можемо имати следећи код;

<bookstore>
  <book>
    <title>The Great Gatsby</title>
    <author>F. Scott Fitzgerald</author>
    <genre>Fiction</genre>
  </book>
  <book>
    <title>The Biggest Dilemma</title>
    <author>George Orwell</author>
    <genre>Dystopian</genre>
  </book>
</bookstore>

Ако желимо да изаберемо све претке елемента ‘титле’ за књигу „Највећа дилема“, можемо имати овај метод осовине предака;

//title[text() = '1984']/ancestor::*

Следећи

Метода Фолловинг Акис лоцира све чворове након завршне ознаке тренутног чвора. Овај метод не узима у обзир хијерархију или локацију својих циљних чворова. На пример, ако имате КСМЛ документ или веб страницу са више одељака, можете идентификовати елемент који се појављује после одређеног одељка без навигације кроз целу структуру стабла.

Родитељ

Метода Парент Акис у КСПатх-у бира родитеља тренутног чвора. Можете користити следећу путању да бисте лоцирали родитељски чвор;

//tag[@attribute="value"]/parent::tagName

Овај приступ функционише када подређени елементи у тренутном чвору имају јединствене атрибуте које можете лако да лоцирате и желите да проверите са родитељем.

дете

Метода Цхилд Акис у КСПатх-у бира све потомке тренутног чвора. Остаје једна од најпопуларнијих метода КСПатх Акис јер помаже у одабиру подређених чворова одређеног елемента.

Размотрите овај део кода;

<section id='text'>
    <p>Paragraph one</p>
    <p>Paragraph two</p>
    <p>Paragraph three</p>
    <p>Paragraph four</p>
</section>

Можемо лоцирати све ‘п’ елементе у нашем коду користећи ову ос;

//section[@id='text']/child::p

ФАКс

Зашто користити КСПатх уместо ЦСС селектора?

ЦСС селектори могу да пронађу елементе само на основу њиховог ИД-а, назива ознаке и класе. С друге стране, можете користити КСПатх за лоцирање елемената на основу њихове локације, текстуалног садржаја и других атрибута у ХТМЛ структури. Такође можете да складиштите КСПатх изразе у променљиве и да их поново користите у својој апликацији.

Које језике подржава КСПатх у Селену?

Можете користити КСПатх са било којим језиком који подржава Селениум. Своје скрипте можете писати у ЈаваСцрипт-у, Јави, Питхон-у, Руби-у, Ц# и ПХП-у.

Које су алтернативе КСПатх-у?

Можете користити ЦСС селекторе, препознавање слика или Селенијумове уграђене локаторе као алтернативу КСПатх-у. ЦСС селектори су најчешћи; можете пронаћи елементе на основу њиховог имена ознаке, ИД-а или класе. Препознавање слика вам омогућава да лоцирате елементе на основу њихових слика. Уграђени локатори Селена су дизајнирани да буду лаки за употребу.

Закључак

Сада можете дефинисати КСПатх у Селену, разликовати апсолутни и релативни КСПатх и лоцирати елементе користећи различите КСПатх локаторе. Избор локатора зависиће од природе садржаја и ваших крајњих циљева.

Погледајте наш чланак о питањима за интервју са Селеном ако желите да завршите свој следећи интервју.