ultimate xpath writing cheat sheet tutorial with syntax
20 најбољих начина за писање ултимативног КСПАТХ за било који тип веб елемента (КСПАТХ никада неће бити неважећи):
Веб апликација се састоји од различитих врста веб елемената као што су веб елемент за дугме на које треба кликнути, унос веб елемента за унос текста, падајући мени, радио дугмад итд.
Ови веб елементи се такође називају ознаке или чворови.
Када је реч о аутоматизацији веб апликација, започиње писањем скрипте за аутоматизацију која ће пронаћи веб елемент, извршити радњу на њему, као што је, кликнути на дугме, унети текст у оквир за унос, означити поље за потврду, одабрати радио дугме, померите се нагоре или надоле и коначно проверите очекивано понашање заузврат радње.
Шта ћете научити:
- Шта је КСПатх и како то изгледа?
- 20 најбољих начина за писање КСПатх-а за било који веб елемент
- # 1) Обрнуто претраживање
- # 2) Коришћење променљивих и прилагођених вредности
- # 3) Коришћење ознака „КСМЛ“, „И“ итд
- # 4) Коришћење атрибута и табеле КСПАТХ
- # 5) Коришћење атрибута, табела и текста
- # 6) Генерисање КСПАТХ помоћу угнежђених атрибута
- # 7) Генерација КСПатх-а комбиновањем атрибута, дељења и дугмета
- # 8) КСПАТХ генерисање помоћу ЦОНТАИНС, РЕВЕРСЕ ЛООКУП, итд.
- # 9) КСПатх генерација помоћу релативног, САДРЖИ, РЕВЕРЗНО, СЛЕДЕЋЕ СИБЛИРАЊЕ итд.
- # 10) Генерација КСПатх-а помоћу атрибута, садржи, обрнуто, пре-сиблинг, дељења и распон
- # 11) Коришћење атрибута, КСМЛ ознака итд.
- # 12) Генерација КСПатх-а тако што се не гледа цела страница, већ се преиспитују све везе и Садржи
- # 13) Коришћење садржаја и атрибута
- # 14) Коришћење атрибута, праћења браће и сестара и потомака
- # 15) Коришћење атрибута, праћења браће и сестара, потомака и текста
- # 16) Коришћење заглавља и текста
- # 17) Коришћење текста заглавља, праћења браће и сестара, путање итд.
- # 18) Коришћење атрибута, садржаја и претходне браће и сестара
- # 19) Тражење падајућег менија помоћу атрибута идентитета, одређеног текста и обрнутог претраживања
- # 20) Комбиновање атрибута „ид“ и тражење везе са одређеним текстом
- Закључак
- Препоручено читање
Шта је КСПатх и како то изгледа?
Проналажење елемента је попут проналаска нечије куће на мапи. Једини начин на који можемо пронаћи дом пријатеља без икакве спољне помоћи је да бисмо требали имати мапу и знати шта можемо наћи (кућу).
Да би се ова аналогија ставила у наш случај, мапа ће се користити као ДОМ (ХТМЛ ознаке, ЈаваСцрипт, итд.) Где постоје сви веб елементи, заједно са одређеним веб елементом који желимо да пронађемо.
Једном када се пронађе јединствена адреса или путања елемента, скрипта за аутоматизацију ће на њему извршити неке радње на основу тестног сценарија. На пример, желите да верификујете УРЛ странице која се отвара након клика на дугме.
Међутим, није једноставно пронаћи јединствену адресу / путању веб елемента, јер могу постојати сличне ознаке, исте вредности атрибута, идентичне путање због чега је тешко створити тачну јединствену адресу веб елементу званом „КСПАТХ“.
Овде ћемо дубоко заронити у неке сјајне и ефикасне технике за генерисање валидних и јединствених КСПАТХ за било коју врсту веб елемената.
Препоручено читање => Идентификујте веб елементе помоћу КСПатх-а у селенијуму
Понекад можете лако креирати КСПатхс користећи екстензије прегледача, али у мом испитивање аутоматизације У својој каријери суочио сам се са безброј ситуација у којима традиционалне екстензије прегледача не раде и морате сами да направите своје прилагођене КСПатхс користећи своју креативност. Сигуран сам да сте се и суочавали са сличним ситуацијама.
У овом упутству ћемо погледати 20 најбољих начина како створити коначни КСПатх за веб елемент на такав начин да ће чак и када се ваш код промени ваш КСПатх остати важећи све време (осим ако програмер не препише цео карактеристика / модул).
Познавајући све ове технике, постаћете мајстор писања сопственог КСПатх-а и моћи ћете да напишете КСПатх-ове убице са врло мало шанси да постану неваљани.
Прво, почнимо са разумевањем КСПатх синтаксе и дефинишемо сваки његов део.
Слика испод приказује како ће КСПатх изгледати заједно са описом сваког дела:
- //: Изаберите тренутни чвор као што су улаз, див итд.
- Означи име: Ознака веб елемента / чвора
- @: Изаберите атрибут
- Атрибути: Име атрибута чвора / одређеног веб елемента
- Вредност: Вредност атрибута
Само желим овде да поделим неколико савета да је 80% времена моја скрипта за аутоматизацију пропала због КСПатх-а. Ово је проузроковано или због тога што постоји више веб елемената за наведени КСПатх или КСПатх није важећи или страница још није учитана.
Дакле, кад год тест случај не успе:
- Копирајте свој КСПатх.
- Претражите га у прегледачу (Ф12 или прозор алата за програмере) у ДОМ-у да бисте проверили да ли је ваљан или не (погледајте доњу слику).
Про тип 1: Уверите се да је јединствен и да се не појављује ниједан други веб елемент када двапут претражујете у ДОМ-у.
Про тип 2: Понекад постоји проблем са временом, што значи да ваш веб елемент / страница још није учитан док га је скрипта тражила, па додајте мало времена чекања и поново тестирајте.
Про тип 3: Покушајте да одштампате цео ДОМ пре него што потражите веб елемент. На овај начин ћете увидом у Конзолу знати да ли ваш веб елемент постоји у ДОМ-у или не.
Пре него што заронимо дубоко у КСПатх потрагу, једна важна ствар коју желим да поделим је да ако имате директан приступ развојном тиму или ако се ваш тим налази тамо где се налазите, затражите од свог развојног тима да вам пружи јединствене ИД-ове у сваки веб елемент или барем оне које желите да користите за аутоматизацију и ово ће вам уштедети пуно времена.
Ако то није могућност, можда ћете морати да искористите своју креативност и осмислите сопствене прилагођене КСПатхс и што ћемо сада научити.
20 најбољих начина за писање КСПатх-а за било који веб елемент
Заронимо у стварање 20 најбољих начина да убијем КСПатх.
# 1) Обрнуто претраживање
Рецимо да желите да кликнете на дугме и постоји слично дугме. Оба дугмета имају атрибуте ид, али су динамична и ниједан атрибут није јединствен у оба елемента дугмета.
У доњем сценарију желимо да кликнемо на дугме „Подешавање“ на „Тест Интерацтиве“.
Код
Ако погледате дугмад „Подешавање“, оба кода су слична. Користећи традиционалне начине као што су ид, име, вредност, садржи итд., Ниједан од њих неће радити, на пример.
// * (садржи (тект (), ‘Сеттинг’)), Ово ће резултирати са два веб елемента. Отуда није јединствен.
Ево коначне стратегије,
>> Прво, пронађите најближу ознаку која је јединствена и у овом случају јесте
XPATH: “//*(@id='rcTEST')
>> Друго, пронађите веб елемент најближи предвиђеном веб елементу који у овом случају садржи (тект (), „ТЕСТ Интерацтиве“). Сада смо у истом месту где постоји дугме „Подешавање“, али да бисмо кликнули на њега, прво треба да одемо на главно помоћу двоструких тачака као што је приказано доле.
XPATH: “//*(@id='rcTEST')//*(contains(text(), 'TEST Interactive'))/..
>> Као што видите, налазимо се на нивоу који има други веб елемент као дугме „Подешавање“. У њему се налазе два дугмета и желимо да пређемо на друго дугме које је дугме „Подешавање“. Додавањем „/ дугмета (2)“ на крају можемо добити наш јединствени КСПАТХ за дугме „Подешавање“ како је приказано доле.
Финал КСПАТХ:
“//*(@id='rcTEST')//*(contains(text(), 'TEST Interactive'))/../button(2)”
Ево још једног начина за генерисање ако мислите да би они могли да промене тип веб елемента из „дугмета“ у нешто друго.
“//*(@id='rcTEST')//*(contains(text(), 'TEST Interactive'))/..//*(contains(text(), 'Setting'))”
или користећи „сроднике“
“//*(@id='rcTEST')//*(contains(text(), 'TEST Interactive'))/following-sibling::button”
# 2) Коришћење променљивих и прилагођених вредности
Рецимо да постоји веб апликација која има ФТП („Филе Трансфер Протоцол“) функцију за отпремање / преузимање датотека и да имате тест случај за преузимање одређене датотеке кликом на везу за преузимање.
Прво, име датотеке коју тражимо можемо дефинисати као променљиву.
Низ очекиванефилеНаме = “Тест1”;
Сада користећи КСПАТХ можемо пронаћи стварно име датотеке.
“String actualFileName = WebDriverAccess.getDriver().findElement (By.xpath('//*'+fileName +'/tr/td(1)')).getAttribute('title');”
У горенаведеном КСПатх-у,… ‘/ тр / тд (1) .гетАттрибуте („ наслов “) ће ићи у одређени ред и прву колону и добиће вредност атрибута наслова. Стварно име датотеке можемо сачувати у другу променљиву.
Када добијемо и очекивана и стварна имена датотека, можемо их упоређивати и ако се оба подударају, једноставно можемо кликнути на његову везу за преузимање.
(if acutalFileName == expectedFileName) { WebDriverAccess.getDriver().findElement(By.xpath('//*'+fileName +'/tr/td(4)')).click(); }
Такође можемо створити петљу кроз сваки ред и наставити верификовати име датотеке док га не пронађете.
Loop(int count <30) { String actualFileName = WebDriverAccess. getDriver ().findElement (By. xpath ('//*'+acutalFileName +'/tr(' + count + ')/td(1)')).getAttribute('title'); (if acutalFileName == expectedFileName) { WebDriverAccess. getDriver ().findElement(By. xpath ('//*'+fileName +'/tr/td(4)')).click(); } Count++; }
Можемо да генеришемо јединствени КСПАТХ користећи прилагођене ознаке и додамо друге услове.
На пример, рецимо да наш намењени веб елемент постоји у главној ознаци и да постоји више ознака адреса, али желите да пронађете само одређену. Све ознаке адреса имају атрибут класе, тако да можемо почети са.
// address(@class='ng-scope ng-isolate-scope')
Приметили смо да се намеравани веб елемент налази у ознаци која садржи текст под називом „Тестирање“.
// address(@class='ng-scope ng-isolate-scope')//div(contains(.,'Testing')
Схватили смо да је као резултат пронађено више веб елемената. Стога да бисмо га учинили јединственијим, можемо додати и друге услове као што је „ид“ који ће нас напокон усмерити на веб елемент који тражимо.
// address(@class='ng-scope ng-isolate-scope')//div(contains(.,Testing') and @id='msgTitle')
# 4) Коришћење атрибута и табеле КСПАТХ
Претпоставимо да желимо да куцамо у веб елемент који је смештен унутар табеле, а табела унутар елемента обрасца.
У ДОМ-у можемо пронаћи све обрасце са именом „мој образац“.
“//*(@name='myForm')”
Сада у свим облицима пронађите табелу са ид-ом „тбл_тестдм“.
'//*(@name='myForm')//table(@id='tbl_ testdm’)”
Унутар табеле идите на одређени ред и колону.
како се користи Јава за отварање јар датотеке
'//*(@name='myForm')//table(@id='tbl_ testdm’)/tbody/tr/td(6)/”
Ако постоји више улаза у ћелији, пронађите улаз где је вредност = „Отвори РФС“ и то ће нам дати коначни КСПатх поља.
//*(@name='myForm')//table(@id='tbl_ testdm’)/tbody/tr/td(6)/ input(@value='Open RFS')'
# 5) Коришћење атрибута, табела и текста
Претпоставимо да се ваш предвиђени веб елемент налази у табели панела и има неки уобичајени текст.
Прво започните с панелом који има јединствени атрибут који је у овом случају „ТИТЛЕ“.
//*(@title=’Songs Lis Applet')
Сада се крећите кроз све ознаке табеле.
//*(@title=’Songs Lis Applet')//table
Унутар свих табела пронађите колону са текстом „Аутор“.
Финал КСПатх би изгледао као:
//*(@title=’Songs List Applet')//table//td(contains(text(),'Author'))
# 6) Генерисање КСПАТХ помоћу угнежђених атрибута
КСПатх циљаног веб-елемента такође може да се генерише помоћу угнежђених атрибута. На пример, у овом случају ће тражити одређени атрибут у ДОМ-у, а затим потражити други атрибут у њему.
//*(@id='parameters')//*(@id='testUpdateTime')')
# 7) Генерација КСПатх-а комбиновањем атрибута, дељења и дугмета
На пример, у доњем КСПатх-у, успео сам да пронађем циљни веб елемент користећи ИД (релативни КСПатх), неке див ознаке и дугме.
“//*(@id='MODEL/PLAN')/div(1)/div(2)/div(1)/div(1)/widget/section/div(1)/div/div(1)/div/div/button(1)'
# 8) КСПАТХ генерисање помоћу ЦОНТАИНС, РЕВЕРСЕ ЛООКУП, итд.
Једном сам имао падајући мени без директне идентификације. Морао сам да користим атрибуте ЦОНТАИНС, РЕВЕРСЕ, ДИВ, да бих дошао до коначног КСПАТХ-а као што је приказано доле.
//*(contains(text(),'Watch Dial))/../div/select(@data-ng-model='context.questions (subqts.subHandleSubId)')'),
# 9) КСПатх генерација помоћу релативног, САДРЖИ, РЕВЕРЗНО, СЛЕДЕЋЕ СИБЛИРАЊЕ итд.
Имао сам ситуацију да апликација приказује графикон и свака вредност графа мора бити потврђена. Али, на жалост, свака вредност није имала јединствену идентификацију, тако да сам смислио коначни КСПАТХ, као што је приказано доле, за једну вредност графикона која комбинује релативне, садржи, обрнуте ознаке, следбенике и див и див ознаке.
//*(@id='RESEARCH/PLAN')//*(contains(@id, 'A4'))/../../following-sibling::div(1)/div(1)/span(1)/span(1)
# 10) Генерација КСПатх-а помоћу атрибута, садржи, обрнуто, пре-сиблинг, дељења и распон
Једном сам морао да потврдим различите податке аларма и свака вредност аларма се приказује на основу одређеног прорачуна или времена. Да бих ухватио сваку вредност, морао сам да смислим КСПАТХ у наставку који користи атрибуте, садржи, обрнуто, ознаке претходног брата, див-ове и распон.
//*(@id='ALARMDATA')//*(contains(@id, 'AFC2'))/../../preceding-sibling::div(1)/div(1)/span(1)/span(1)
# 11) Коришћење атрибута, КСМЛ ознака итд.
У доњем КСПАТХ, атрибутима и КСМЛ ознакама, низ се користи за проналажење коначне јединствене адресе веб елемента.
//*(@id='RESEARCH/REVIEW') //widget/section/div(1)/div/div(2)/div(1)/div(3)/div(1)//span(@class='details')
# 12) Генерација КСПатх-а тако што се не гледа цела страница, већ се преиспитују све везе и Садржи
Доле наведени КСПатх тражио би само везе на целој страници које садрже текст као „Ручни унос података параметара“.
//a(contains(.,'Parameter Data Manual Entry'))
# 13) Коришћење садржаја и атрибута
//*(contains(@style,'display: block; top:'))//input(@name='daterangepicker_end')
# 14) Коришћење атрибута, праћења браће и сестара и потомака
//*(@id='dropdown-filter-serviceTools')/following-sibling::ul/descendant::a(text()='Notepad')
# 15) Коришћење атрибута, праћења браће и сестара, потомака и текста
//*(@id='dropdown-filter-service tools') /following-sibling::ul/descendant::a(text()='Trigger Dashboard')
# 16) Коришћење заглавља и текста
Ако је веб елемент заглавље са одређеним текстом, тада КСПатх може бити као што је приказано доле:
//h3(text()='Internal Debrief')
# 17) Коришћење текста заглавља, праћења браће и сестара, путање итд.
//h3(contains(text(),'Helium Level'))/following-sibling::div/label/input
# 18) Коришћење атрибута, садржаја и претходне браће и сестара
Једном кад сам имао распон који није имао ниједан јединствени атрибут, створио сам КСПАТХ комбинујући апсолут, Садржи, претходну браћу и сестре и још један апсолутни пут.
//div(div(p(contains(text(),'Status'))))/preceding-sibling::div/div/span(3)/span
# 19) Тражење падајућег менија помоћу атрибута идентитета, одређеног текста и обрнутог претраживања
//*(@id='COUPLING')//*(contains(text(),'COUPLE Trend'))/../div/select
# 20) Комбиновање атрибута „ид“ и тражење везе са одређеним текстом
//*(@id='ffaHeaderDropdown')//a(contains(text(),'Start Workflow'))
Закључак
Што се тиче писања убице КСПАТХ, то заиста зависи од тога колико добро разумете и анализирате код. Што више разумете код, то ће бити више начина на које ћете пронаћи писање ефикасних КСПАТХ-ова.
Први корак у писању КСПатх-а је проналажење најближег јединственог веб-елемента вашем циљном веб-елементу и непрестано приближавање користећи различите технике о којима је раније било речи, као што су атрибути, ДИВ-ови, праћење, садржаји итд.
На крају бисмо ово још једном рекли да ће вам заиста олакшати живот ако затражите да ваш развојни тим дода јединствене ИД-ове у све веб елементе који вас занимају.
Кад год започне спринт циклус или рад на новим захтевима и тим се подели са новим макетама, увек прођем кроз све макете и у мислима размишљам о потенцијалним тестовима аутоматизације, припремим листу свих потенцијалних веб елемената који ће се користити у тестовима аутоматизације и припремам сопствене ИД-ове.
Када се заврши листа свих веб елемената заједно са мојим предложеним ИД-овима, претходно бих је поделио програмеру да би се користио у развојном коду. На тај начин бих увек добио јединствене ИД-ове олакшавајући своју битку за писање КСПАТХ-а.
Испод је комбинована листа различитих начина за писање КСПАТХ-а:
- „// * (@ ид =’ рцТЕСТ ’) // * (садржи (текст (),„ ТЕСТ Интерактивно “)) /../ дугме (2)“
- „// * (@ ид =’ рцТЕСТ ’) // * (садржи (текст (),‘ ТЕСТ Интерактивни ’)) /..//* (садржи (текст (),‘ Подешавање ’))”
- “// * (@ ид =’ рцТЕСТ ’) // * (садржи (текст (),‘ ТЕСТ Интерактивно ’)) / след-брат или сестра :: дугме”
- „Стринг ацтуалФилеНаме = ВебДриверАццесс.гетДривер (). ФиндЕлемент (Би.кпатх („ // * ”+ филеНаме +” / тр / тд (1) ”)). ГетАттрибуте („ титле “);“
- ВебДриверАццесс.гетДривер (). ФиндЕлемент (Би.кпатх (“// *” + ФилеНаме + ”/ тр / тд (4)”)). Цлицк ();
- '// адреса (@ цласс = 'нг-сцопе нг-исолате-сцопе') // див (садржи (., Тестирање ') и @ ид =' мсгТитле ')'
- “// * (@ наме =’ миФорм ’) // табела (@ ид =’ тбл_ тестдм ’) / тбоди / тр / тд (6) /
- улаз (@ валуе = ’Опен РФС’) “
- “// * (@ титле =’ Аплет листе песама ’) // табела // тд (садржи (текст (),’ Аутор ’))”
- „// * (@ ид =’ параметри ’) // * (@ ид =’ тестУпдатеТиме ’)”) “
- “// * (@ ид = 'МОДЕЛ / ПЛАН') / див (1) / див (2) / див (1) / див (1) / видгет / сецтион / див (1) / див / див (1) / див / див / дугме (1) ”
- „// * (садржи (тект (),’ Ватцх Диал)) /../ див / селецт (@ дата-нг-модел = ’цонтект.куестионс (субктс.субХандлеСубИд)’) ”),“
- “// * (@ ид = 'ИСТРАЖИВАЊЕ / ПЛАН') // * (садржи (@ид, 'А4')) /../../ фолловинг-сиблинг :: див (1) / див (1) / распон (1) / распон (1) ”
- “// * (@ ид = 'АЛАРМДАТА') // * (садржи (@ид, 'АФЦ2')) /../../ прецединг-сиблинг :: див (1) / див (1) / спан ( 1) / распон (1) ”
- “// * (@ ид = 'ИСТРАЖИВАЊЕ / ПРЕГЛЕД') // додатак / одељак / див (1) / див / див (2) / див (1) / див (3) / див (1) // распон ( @ цласс = 'детаљи') ”
- „//А( садржи ((,, Ручни унос података параметра’)) “
- „// * (садржи (@ стил,’ приказ: блок; врх: ’)) // унос (@ име =‘ датумски опсег_енд ’)“
- „// * (@ ид =’ дропдовн-филтер-сервицеТоолс ’) / фолловинг-сиблинг :: ул / десцендант :: а (тект () =’ Нотепад ’)“
- „// * (@ ид =’ дропдовн-филтер-сервицеТоолс ’) / фолловинг-сиблинг :: ул / десцендант :: а (тект () =’ Триггер Дасхбоард ’)“
- „// х3 (тект () =’ Интерни опис ’)“
- „// х3 (садржи (текст (),’ ниво хелијума ’)) / следећи брат или сестра :: див / лабел / инпут”
- “// див (див (п (садржи (текст (),’ Статус ’))))) / предходно-сродство :: див / див / спан (3) / спан”
- „// * (@ ид =’ СПОЈАЊЕ ’) // * (садржи (текст (),’ ПАР ПАРЦЕЛА ’)) /../ див / селецт”
- „// * (@ ид =’ ффаХеадерДропдовн ’) // а (садржи (текст (),‘ Покрени ток рада))) ”
Надам се да би вам овај информативни чланак обогатио знање о писању КСПатхс-а.
Аутор биографије: Овај чланак написао је Аднан Ариф, ИТ стручњак са разноликим искуством и вештинама у својој каријери која траје више од 9 година.
Препоручено читање
- Дубински водичи за помрачење за почетнике
- Питхон ДатеТиме Водич са примерима
- Синтакса наредбе Уник Цат, опције са примерима
- Уник наредба за сортирање са синтаксом, опцијама и примерима
- Водич за скрипте за Уник Схелл са примерима
- Водич за текст помоћу примера за проналажење елемента селена
- Водич за главне функције Питхона са практичним примерима
- Постпроцесор екстрактора Кспатх у ЈМетер-у