Waggoota darban keessatti adeemsa tokko arguuf yeroo dheeraaf misooma fuulduraa keessa tureera: misoomsitoonni dargaggootaa haala seenaa isaa osoo hin hubatin paradigm haaraa sagantaa hojjechuu wajjin hojjechuu. Waan tokko beekuu dhabuun guutummaatti akka hubatamu beekamaadha. Weebsaayitiin iddoo baay’ee guddaa ogummaa fi ogummaa adda addaa qabu yoo ta’u, yeroo hunda waan hin beekne hin beeknu. Gama kanaan barachuun waan al tokko ta’ee fi xumuramu osoo hin taane imala itti fufiinsa qabuudha. Case in point: Namni garee koo keessaa tokko fayyadamtoonni UI keessatti caancala murtaa'e tokko irraa fagaatanii deemuu isaanii adda baasuun ni danda'ama jedhee gaafate. Taatee JavaScript’s beforeunload ta’e akeekeen ture. Garuu warri kanaan dura kana furan kun akka danda'amu kan beekan waa'ee daataa hin qusatamneef marsariitiiwwan biroo irratti akeekkachiisa waan rukutamaniif, kanaaf beforeunload is a typical use case. Akkasumas taateewwan pageHide fi visibilityChange safartuu gaariidhaaf michuu kootiif akeekeera. Waaʼee sanaa akkamittan beeku? Pirojektii biraa keessatti waan dhufeef malee yeroon jalqaba JaavaScript baradhu irratti ol qo'adheef miti. Dhugaan jiru garuu, furmaatonni ammayyaa fuulduraa garba dhaabbilee teeknooloojii gurguddoo isaan dura turan irra dhaabbatanii jiru. Isaan gochaalee misoomaa abstraaktii godhan, yeroo baayyee muuxannoo misoomsaa fooyya'aa kan hir'isu, ykn illee dhabamsiisu, barbaachisummaa beekuu ykn tuquu waan aadaa yaad-rimeewwan fuulduraa barbaachisoo ta'an tarii namni hundi beekuu qabu. Mee Moodeela Wantoota CSS (CSSOM) ilaali. Namni CSS fi JavaScript keessatti hojjetu kamiyyuu muuxannoo CSSOM harkaan hojjetamu baay’ee qaba jettanii eeguu dandeessu, garuu yeroo hunda akkas hin ta’u. Saayitii daldala elektirooniksii ani irratti hojjedheef pirojektiin React kan amma dhiyeessaa kaffaltii filatameef stylesheet fe'uu qabnu ture. Rakkoon ture, stylesheet fuula hunda irratti yeroo dhuguma fuula murtaa'e irratti qofa barbaachisutti fe'amaa ture. Developer kana akka ta’uuf itti kenname, stylesheet dynamically fe’ee hin beeku. Ammas, kun guutummaatti kan hubatamu yeroo React mala aadaa ati bira gahuu dandeessu abstracts away godhudha. CSSOM hojii guyyaa guyyaa keessan keessatti waan isin barbaachisu ta'uu hin oolu. Garuu yeroo tokkotti, yeroo tokkotti illee, isa waliin wal qunnamuun si barbaachisuu hin oolu. Muuxannoowwan kun barreeffama kana akkan barreessu na kakaasan. Amaloonni weebii fi teeknooloojiiwwan bosona keessa jiran hedduun hojii guyyaa guyyaa keessan keessatti kallattiin gonkumaa hin tuqne ta’uu danda’u. Tarii ati guddina weebii irratti baay’ee haaraa waan taateef salphaatti isaan hin beektu sababiin isaas abstraction framework murtaa’e kan gadi fageenyaan beekuu si hin barbaanne, ykn illee tasumaa beekuu si hin barbaachifne. Addatti waa’ee XML dubbachaa jira, baay’een keenya afaan durii guutummaatti HTML irraa adda hin taane ta’uu isaa beekna. Kana kanan fiduuf marii WHATWG dhiheenya kana taasifameen, tuullaa XML kan sagantaa XSLT jedhamuun beekamu keessaa harki guddaan biraawzaroota irraa haqamuu akka qabu yaada dhiheesseef. Kun sirriitti gosa teeknooloojii durii, kan waggootaaf qabnu kan akka haala CSSOM gareen koo keessa ture qabatamaa ta’eef itti fayyadamuu dandeenyudha. Kanaan dura XSLT waliin hojjetteettuu? Mee teknooloojii durii kana irratti baay’ee hirkatnee, haala XMLn ala amala isaa fayyadamnee rakkoolee addunyaa dhugaa har’aa furuuf yoo ta’e haa ilaallu. XPath: API Giddugaleessaa Teeknooloojiin XML inni guddaan tarii ilaalcha XML qajeelaatiin ala baay'ee faayidaa qabu XPath dha, afaan gaaffii kan noodi ykn amaloota kamiyyuu muka mallattoo keessatti elementii hundee tokkoon argachuuf si dandeessisudha. Ani jaalala dhuunfaa XSLT qaba, garuu sunilleen XPath irratti hirkata, jaalala dhuunfaa barbaachisummaa sadarkaa kennuu keessatti cinatti dhiisuu qaba. Falmiin XSLT haquuf godhamu waa'ee XPath tokkollee hin kaasu, kanaaf ammallee ni hayyamama jedheen yaada. Sun gaarii dha sababiin isaas XPath API giddugaleessaa fi barbaachisaa ta’e tuutaa teeknooloojii kana keessatti, keessumaa yeroo itti fayyadama XML idileetiin ala waan itti fayyadamnu argachuuf yaalnu. Barbaachisaa dha sababiin isaas, filattoonni CSS irra caalaan elementoota fuula kee keessa jiran argachuuf fayyadamuu kan danda'an ta'us, hunda isaanii argachuu hin danda'an. Kana malees, filattoonni CSS elementii bakka amma jiru DOM keessatti irratti hundaa'uun argachuuf fayyadamuu hin danda'an. XPath ni danda'a. Amma, gariin keessan kanneen kana dubbisaa jirtan XPath beekuu dandeessu, gariin immoo hin beektu ta'a. XPath naannoo teeknooloojii baay’ee guddaadha, dhuguma bu’uuraalee hunda barsiisuu fi akkasumas barruu tokko akka kanaa keessatti wantoota qabbanaa’oo ittiin hojjechuu qabdan isinitti agarsiisuu hin danda’u. Dhugumatti barruu sana barreessuu yaaleera, garuu maxxansi Smashing Magazine giddu galeessaan jechoota 5,000 ol hin deemu. Duraanis caalaa turejechoota 2,000 yoo ta’u bu’uuraa walakkaa qofa. Kanaafuu, XPath’n waan qabbanaawaa hojjechuu jalqabuun, yoo wanti kun hawwataa ta’e yoo isinitti mul’ate hidhannoowwan bu’uuraaf itti fayyadamuu dandeessan tokko tokko isiniif kenna. XPath & CSS walitti makuu XPath wantoota baay’ee filattoonni CSS yeroo elementoota gaafatan hin dandeenye hojjechuu danda’a. Garuu filattoonni CSS wantoota muraasa XPath hin dandeenyes hojjechuu danda’u, isaanis, elementoota maqaa gitaatiin gaafachuu.
CSS XPath jedhamuun beekama .Gata koo /*[of keessaa qaba(@gita, "Gita koo")]
Fakkeenya kana keessatti, CSS qaamolee maqaa gitaa .myClass of keessaa qaban gaafata. Gidduu kana, fakkeenyi XPath elementoota gita amalootaa of keessaa qaban dhangii “myClass” waliin gaafata. Jecha biraatiin, amaloota kamiyyuu keessatti elementoota myClass qaban filata, elementoota maqaa gitaa .myClass qaban dabalatee — akkasumas qaamolee “myClass” qaban dhangii keessatti, kan akka .myClass2. XPath miira sanaan bal'aadha. Kanaafuu, lakki. CSS toss out gochuun elementoota hunda karaa XPath filachuu jalqabuu qabna jechuu koo miti. Dubbiin jiru kana miti. Dubbiin jiru XPath wantoota CSS hin dandeenyee fi ammas baay'ee faayidaa qabaachuu danda'u hojjechuu danda'a, haa ta'u malee teeknooloojii durii tuullaa biraawzari keessa jiruu fi ilaalcha jalqabaa irratti ifa ta'uu dhiisuu danda'a. Mee teknooloojiiwwan lamaan kana waliin haa fayyadamnu waan dandeenyuuf qofa osoo hin taane, adeemsa keessa waa’ee XPath waan tokko waan barannuuf, meeshaa biraa tuullaa keessan keessatti akka ta’u gochuu — kan isin hin beekne ta’uu danda’u yeroo hunda achi ture! Rakkoon jiru mala JavaScript’s document.evaluate fi maloonni filannoo gaaffii adda addaa nuti CSS APIs JavaScript wajjin fayyadamnu wal hin simne. Jalqabuuf API gaaffii walsimsiisu hojjedheera, haa ta’u malee, waan asitti hojjennu irraa fagaachuu waan ta’eef yaada baay’ee itti hin galchine. Fakkeenyi hojii salphaa ta’e kan ijaartuu gaaffii irra deebi’amee fayyadamuu danda’u kunooti: Gaaffii QalamaXPath [forked] kan Biraayyan Raasmusen ilaali. Wanti galmee irratti mala lama dabaleera: queryCSSSelectors (innis bu’uuraan querySelectorAll) fi queryXPaths. Isaan kun lamaan wanta queryResults deebisu:
{ Gosa gaaffii: noodota | dhangii | lakkoofsa | boolee, . bu'aa: kamiyyuu[] // elementoota html, elementoota xml, dhangiiwwan, lakkoofsota, booleans, . queryCSSSelectors: (gaaffii: dhangii, fooyyessa: boolean) => Bu'aa gaaffii, . queryXpaths: (gaaffii: dhangii, fooyyessa: boolean) => Bu'aa gaaffii } .
Faankishiniiwwan queryCSSSelectors fi queryXpaths gaaffii ati isaaniif kennitu elementoota tarree bu'aa keessa jiran irratti hojjetu, hanga tarreen bu'aa noodota akaakuu ta'etti, beekamaadha. Yoo kana hin taane, bu'aa gaaffii tarree duwwaa fi gosa noodota waliin ni deebisa. Yoo qabeentiin fooyyessuu gara dhugaatti qindaa'e, faankishiniiwwan bu'aa gaaffii mataa isaanii ni jijjiiru. Haala kamiinuu kun naannoo oomishaa keessatti fayyadamuu hin qabu. Ani akkasitti kanan godhu bu'aa adda addaa API gaaffii lamaan walitti fayyadamuu agarsiisuuf qofa. Gaaffiiwwan Fakkeenya Fakkeenya muraasa gaaffiiwwan XPath adda addaa kanneen wantoota humna guddaa qaban tokko tokkoo fi akkaataa isaan bakka mala birootti fayyadamuu danda'an agarsiisan agarsiisuu barbaada. Fakkeenyi jalqabaa //li/text() dha. Kunis elementoota li hunda gaafatee noodota barruu isaanii deebisa. Kanaafuu, HTML armaan gadii yoo gaafanne:
- jechuun ni danda’ama
- tokko
- lama
- sadii
...kan deebi'u kana:
{"gosa gaaffii":"xpathEvaluate","bu'aa":["tokko","lama","sadii"],"gosa bu'aa":"dhangii"}
Jecha biraatiin, tarree armaan gadii arganna: ["tokko","lama","sadii"]. Akka idileetti, sana argachuuf elementoota li gaafatta, bu'aa gaaffii sanaa gara tarree jijjiirta, tarree kaartaa, fi noodi barruu tokkoon tokkoo elementii deebifta. Garuu sana caalaatti gabaabsinee XPath waliin gochuu dandeenya: document.queryXPaths("//li/barruu()").bu'aa.
Hubadhu karaan noodi barruu argachuuf text() fayyadamuudha, kunis mallattoo faankishinii fakkaata — fi ni jira. Noodii barruu elementii tokkoo deebisa. Fakkeenya keenya keessatti, mallattoolee li sadii kan jiran yoo ta'u, tokkoon tokkoon isaanii barruu ("tokko", "lama", fi "sadii") of keessaa qabu.
Mee fakkeenya tokko dabalataan gaaffii barruu() haa ilaallu. Kun mallattoo keenya haa jennu:
Mee gaaffii gatii amaloota href deebisu haa barreessinu: document.queryXPaths("//a[barruu() = 'Galmaa']/@href").bu'aa.
Kun gaaffii XPath galmee ammaa irratti, akkuma fakkeenya isa dhumaa, garuu yeroo kana amaloota href hidhaa (elementii) barruu “Sign In” of keessaa qabu deebifna. Kan qabatamaan deebi'ebu'aan ["/login.html"] dha. Haala Waliigalaa Faankishiniiwwan XPath Faankishiniiwwan XPath baay’een jiru, tarii isaan hin beekne ta’a. Kanneen armaan gadii dabalatee, kanneen beekuu qaban hedduutu jiru jedheen yaada:
starts-withYoo barruun fakkeenya barruu biraa murtaa'een jalqabe, starts-with(@href, 'http:') yoo amalli href http: irraa jalqabe dhugaa deebisa. containsYoo barruun fakkeenya barruu biraa murtaa'e qabaate, contains(text(), "Smashing Magazine") dhugaa deebisa yoo noodiin barruu jechoota “Smashing Magazine” bakka kamittiyyuu of keessaa qabaate. countLakkoofsa walsimsiisaa meeqa gaaffii tokkoof akka jiru deebisa. Fakkeenyaaf, count(//*[starts-with(@href, 'http:']) lakkoofsa hidhannoowwan meeqa noodiin yaada keessa jiran elementoota amaloota href qaban kan barruu http: irraa jalqabu of keessaa qabu deebisa. substringAkka tarree xiqqaa JaavaScript hojjeta, dhangicha akka murfiitti dabarsitee malee. Fakkeenyaaf, substring("barruu koo", 2, 4) "y t" deebisa. substring-beforeKutaa dhangii dhangii biraa duratti deebisa. Fakkeenyaaf, substing-before("barruu koo", " ") "koo" deebisa. Haaluma walfakkaatuun, substring-before("hi","bye") dhangii duwwaa deebisa. substring-afterKutaa dhangii dhangii biraa booda deebisa. Fakkeenyaaf, substing-after("barruu koo", " ") "barruu" deebisa. Haaluma walfakkaatuun, substring-after("hi","bye")dhangii duwwaa deebisa. normalize-spaceDarree murfii iddoo adii dursaa fi duubaa haquu fi tartiiba arfiilee iddoo adii iddoo tokkoon bakka buusuun normalize ta'een deebisa. notYoo falmiin soba ta'e dhugaa boolean deebisa, yoo kana hin taane soba. dhugaaBoolean dhugaa deebisa. sobaBoolean soba deebisa. concatWanta JaavaScript concat wajjin tokko, akka malaatti dhangii irratti hin hojjenne malee. Kanaa mannaa, dhangiiwwan walitti hidhuu barbaaddu hunda galchita. string-lengthKun dheerina dhangii JaavaScript wajjin tokko miti, garuu dheerina dhangii akka murfiitti kenname deebisa. translateKun dhangii fudhatee murfii lammaffaa gara murfii sadaffaatti jijjiira. Fakkeenyaaf, hiikuu("abcdef", "abc", "XYZ") XYZdef fida.
Faankishiniiwwan XPath addaa kanaan alatti, faankishiniiwwan biroo baay'een kanneen akka gita isaanii JaavaScript wajjin walfakkaatu hojjetan — ykn gita isaanii bu'uuraan afaan sagantaa kamiyyuu keessatti — kanneen tarii akkasumas faayidaa qaban argachuu dandeessu, kanneen akka lafa, sillaasee, geengoo, walitti qabama, fi kkf. Deemoo armaan gadii tokkoon tokkoon dalagaalee kanaa agarsiisa: Faankishiniiwwan lakkoofsaa Pen XPath [forked] kan Bryan Rasmussen ilaali. Hubadhu, akkuma irra caalaan faankishiniiwwan too'annoo dhangii, kanneen lakkoofsaa baay'een isaanii galtee tokko fudhatu. Kun, beekamaadha, sababni isaas isaan gaaffiidhaaf fayyadamuu qabu jedhamee waan yaadamuuf, akkuma fakkeenya XPath isa dhumaa: //li [lafa (barruu ()) > 250]/@val
Yoo isaan fayyadamte, akkuma fakkeenyota baay'een godhan, dhumarratti noodii jalqabaa daandii wajjin walsimu irratti fiigda. Akkasumas faankishiniiwwan jijjiirraa akaakuu tokko tokko kan tarii irraa fagaachuu qabdan jiru sababiin isaas JaavaScript duraanuu rakkoo jijjiirraa akaakuu mataa isaa qaba. Garuu yeroon ati lakkoofsa biraa tokko waliin ilaaluuf jecha dhangii gara lakkoofsaatti jijjiiruu barbaaddu jiraachuu danda'a. Faankishiniiwwan akaakuu wantaa saaguun boolii, lakkoofsa, dhangii fi noodi dha. Kunniin gosoota deetaa XPath barbaachisoodha. Akkasumas akkuma yaaddan, irra caalaan faankishiniiwwan kun gosoota deetaa noodota DOM hin taane irratti fayyadamuu ni danda'u. Fakkeenyaaf, substring-after akkuma duraan uwwifnetti dhangii fudhata, garuu dhangii amaloota href irraa ta’uu danda’a. Akkasumas hidhaa qofa ta'uu danda'a:
const testSubstringAfter = document.queryXPaths("tarree xiqqaa-booda ('nagaa addunyaa',' ')");
Ifatti, fakkeenyi kun tarree bu'aa akka ["world"] tti nuuf deebisa. Kana gochaan agarsiisuuf, fuula demoo faankishiniiwwan wantoota noodota DOM hin taane irratti fayyadamuun hojjedheera: Gaaffii QalamaXPath [forked] kan Biraayyan Raasmusen ilaali. Gama ajaa'ibsiisaa faankishinii hiikuu hubachuu qabda, innis yoo arfii murfii lammaffaa keessatti qabaatte (i.e., tarree arfiilee hiikamuu barbaaddu) fi arfii walsimsiisu itti hiikuuf hin jirre, arfiin sun firii irraa ni haqama. Haala kanaan, kun:
translate('Akkam jirtu, Maqaan koo Inigo Montoya jedhama, ati abbaa koo ajjeeste, du'uuf qophaa'i','abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ,','*')
...bu'aa dhangii keessatti, iddoowwan dabalatee: [" * * ** "]
Kana jechuun qubeen “a” gara urjii (*)tti hiikamaa jira, garuu arfiin biraa hundi kan hiikkaa hin qabne kan tarree galma kenname guutummaatti ni haqama. Bakki adiin nu hafe qofaarfiilee “a” hiikaman gidduutti. Sana booda ammas gaaffiin kun:
translate('Akkam jirtu, Maqaan koo Inigo Montoya jedhama, ati abbaa koo ajjeeste, du'uuf qophaa'i','abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ,','******************************************************')")
...rakkina hin qabuu fi bu'aa akkas fakkaatu baasee:
"***** ** **** ** ***** ******* *** ****** ** ****** ******* ** ***"
JaavaScript keessatti karaan salphaan waan faankishiniin hiikkaa XPath hojjetu sirriitti hojjechuuf akka hin jirre sitti dhaga'amuu danda'a, haa ta'u malee haalawwan fayyadama baay'eedhaaf, replaceAll ibsitoota idileetiin qabachuu danda'a. Mala ani agarsiise fayyadamuu dandeessa, garuu sun suboptimal dha yoo wanti ati barbaaddu dhangiiwwan hiikuu qofa ta'e. Demoo armaan gadii kun faankishinii hiikkaa XPath’s maratee gosa JaavaScript kennuu: Faankishinii hiikkaa Qalama [forked] kan Bryan Rasmussen ilaali. Waan akkanaa eessatti fayyadamuu dandeessa? Mee icciitii Caesar Cipher kan ofseeti bakka sadii qabu (fkn, icciitii sarara gubbaa bara 48 Dh.K.D. irraa) ilaali:
translate("Qeesaar Ruubikoon ce'uuf karoorfateera!", "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" jechuun kan qophaa'e. "XYZABCDEFGHIJKLMNOPQRSTUVWxyzabcdefghijklmnopqrstuvw") Afaan Oromoo fi Jechoota Dinqisiiso Afaan Oromoo.
Barreeffamni galtee “Qeesaar Ruubikoon ce’uuf karoorfateera!” bu’aan isaas “Zxbpxo fp mixkkfkd ql zolpp qeb Oryfzlk!” Fakkeenya saffisaa biraa carraa adda addaa kennuudhaaf, faankishinii sibiilaa galtee dhangii fudhatuu fi barruu deebisuuf faankishinii hiikuu fayyadamu hojjedheera, arfiilee umlauts fudhatan hunda dabalatee. Faankishinii sibiilaa Pen [forked] kan Biraayyan Raasmusen ilaali.
sibiilli dhaabbataa = (str) => { . deebi'i hiikuu(str, "AOUaou","ÄÖÜäöü"); } .
Akkasumas, barreeffamni “Motley Crue rules, rock on dudes!”, jedhu yoo kennameef, “Mötley Crüe rüles, röck ön düdes!” Ifatti, namni tokko itti fayyadama paroodii gosa hunda faankishinii kanaa qabaachuu danda’a. Yoo sun si ta’e, barreeffamni TVTropes kun kaka’umsa hedduu siif kennuu qaba. CSS XPath Waliin Fayyadamaa Sababni keenya inni guddaan filattota CSS XPath waliin fayyadamuuf yaadadhu: CSS baay'ee gita maal akka ta'e hubata, yeroo ta'u wanti gaariin ati XPath waliin gochuu dandeessu walmadaalchisuu dhangii amaloota gitaati. Sun yeroo baay’ee ni hojjeta. Garuu yoom iyyuu haala, jedhaa, namni tokko gita maqaa .primaryLinks fi .primaryLinks2 jedhaman uume fi gita .primaryLinks argachuuf XPath fayyadamaa jirta ta'e, sana booda rakkoon si mudachuu hin oolu. Hanga wanti gowwummaan akkasii hin jirretti, XPath fayyadamuu hin oollu. Garuu bakka namoonni gosoota gowwummaa sana hojjetanitti hojjedheera jedhee gabaasuun koo na gaddisiisa. Kunoo demoo biraa CSS fi XPath waliin fayyadamu. Yeroo koodii fayyadamnee XPath node haalata kan node galmee hin taane irratti hojjennu maal akka ta’u agarsiisa. Pen css fi xpath waliin [forked] kan Bryan Rasmussen barreesse ilaalaa. Gaaffiin CSS .relatedarticles a dha, kunis elementoota a lamaan div gita .relatedarticles ramadame keessatti fida. Sana booda gaaffiiwwan “hamaa” sadii, jechuunis gaaffiiwwan yeroo elementoota kana akka noodiin yaadaatti qabatanii hojjetan waan nuti akka hojjetan barbaannu hin hojjenne. Maaliif amala isin eegdan irraa adda ta'e akka agarsiisan ibsuu nan danda'a. Gaaffiiwwan badaan sadan gaaffii keessa jiran:
//text(): Barruu galmee keessa jiru hunda deebisa. //a/text(): Barruu hunda walqabsiistota keessaa galmee keessaa deebisa. ./a/text(): Bu'aa tokkollee hin deebisu.
Sababni bu'aawwan kanaa, yaadni kee elementoota gaaffii CSS irraa deebi'an yoo ta'u, // faallaa galmee guutuu deema. Kun cimina XPath ti; CSS noodi irraa gara akaakayyuu tokkootti ol bahee achiis gara obboleessa akaakayyuu sanaatti, fi gara sanyii obboleessa sanaatti gadi bu'uu hin danda'u. Garuu XPath ni danda'a. Gidduu kana, ./ ijoollee noodi ammaa gaafata, bakka tuqaa (.) noodi ammaa bakka bu'u, fi cirrachi fuulduraa (/) gara noodi mucaa tokko tokkoo deemuu bakka bu'a — amalli, elementii, ykn barruu ta'uu isaa kutaa daandii itti aanuun murtaa'a. Garuu mucaan elementii gaaffii CSSn filatame hin jiru, akkasitti gaaffiin sun homaa hin deebisu. Demoo isa dhumaa sana keessatti gaaffiiwwan gaarii sadii jiru:
.//barruu(), . ./barruu(), . normalize-space(./barruu ()).
Gaaffiin normalize-space fayyadama faankishinii XPath agarsiisa, garuu rakkoo gaaffiiwwan biroo keessatti hammatame sirreessa. HTMLn akkasitti caaseffama:
Qormaata Amala Keessan Selenium WebDriver tiin Ofumaan Hojjechuu jechuun ni danda’ama
Gaaffiin jalqaba fi dhuma qaree barruu irratti nyaata sararaa deebisa, .fi normalize-space kana ni haqa. Faankishinii XPath kamiyyuu kan boolean malee waan biraa galtee XPath waliin deebisu fayyadamuun faankishiniiwwan biroo irratti hojjeta. Deemoo armaan gadii fakkeenyota hedduu agarsiisa: Fakkeenyota faankishiniiwwan Pen xpath [forked] kan Bryan Rasmussen ilaali. Fakkeenyi jalqabaa rakkoo of eeggannoo gochuu qabdu agarsiisa. Addatti ammoo koodii armaan gadii:
document.queryXPaths("tarree-xiqqaa-booda (//a/@href,'https://')");
...dhangii tokko deebisa:
"www.smashingmagazine.com/2018/04/qormaata-amaloota-seelenium-webdriver/"
Hiika qaba mitiiree? Faankishiniiwwan kun tarreewwan hin deebisan garuu dhangiiwwan tokko ykn lakkoofsota tokkicha. Faankishinii bakka kamiyyuu bu'aa hedduu waliin hojjechuun bu'aa jalqabaa qofa deebisa. Bu’aan inni lammaffaan waan dhuguma barbaannu agarsiisa:
galmee.gaaffiiCSSSfilattoota("a").gaaffiiXPaths("tarree-xiqqaa-booda(./@href,'https://')");
Kan tarree dhangiiwwan lamaa deebisu:
["www.smashingmagazine.com/2018/04/qormaata-amalootaa-seelenium-webdriver/","www.smashingmagazine.com/2022/11/bu'aan-qormaata-ofumaan-dhaqqabummaa-foyya'e/"]
Faankishiniiwwan XPath akkuma faankishiniiwwan JaavaScript keessatti man'ee ta'uu danda'u. Kanaafuu, yoo caasaa URL Smashing Magazine beekne, kanneen armaan gadii gochuu dandeenya (jechaalee unkaa fayyadamuun ni gorfama): `hiikuu( tarree xiqqaa( substring-after(./@href, ‘www.barruulee caccabsuu.com/') ,9), . '/','')`
Kun xiqqoo walxaxaa ta'aa jira hamma yaada waan hojjetu ibsu barbaadutti: URL hunda amaloota href irraa www.smashingmagazine.com/ booda fudhadhu, arfiilee sagal jalqabaa haqi, sana booda arfii gara fuulduraatti (/) gara homaatti hiikuun akka xumura fuulduraatti qaxxaamuraa irraa of qusachuuf. Tarree bu'aa:
["feature-testing-selenium-webdriver","bu'aan-qormaata-ofumaan-dhaqqabummaa-fooyyessa"].
Haala Fayyadama XPath dabalataa XPath dhuguma qorannoo keessatti ifuu danda'a. Sababni isaa arguun rakkisaa miti, sababiin isaas XPath fayyadamuun elementii hunda DOM keessa jiru, bakka kamirraayyuu DOM keessaa argachuun ni danda'ama, CSS garuu hin danda'u. Sirnoota ijaarsa ammayyaa hedduu keessatti gita CSS walfakkaataa ta'anii akka hafan lakkaa'uu hin dandeessu, garuu XPath waliin, qabiyyeen barruu elementii tokkoo maal akka ta'e, caasaa DOM jijjiiramaa osoo hin ilaalin, walsimsiisa cimaa ta'e gochuu dandeenya. Tooftaalee qorannoo XPath dandamachuu danda'u hojjechuuf si dandeessisan irratti qorannoon gaggeeffameera. Filataan CSS kana booda waan tokko maqaa jijjiiramee ykn haqameef qofa qorannoowwan flake out fi fail gochuu caalaa wanti hamaan hin jiru. XPath akkasumas dhuguma guddaa dha multiple locator extraction irratti. Gaaffiiwwan XPath fayyadamuun elementii tokko walsimsiisuuf karaan tokkoo ol jira. CSS irrattis kanuma. Garuu gaaffiiwwan XPath haala caalaatti xiyyeeffannoo qabuun wantoota keessa qotuu danda'u kan waan deebi'u daangessu, walsimsiisa murtaa'aa bakka walsimsiisni ta'uu danda'u hedduun jiraachuu danda'u argachuuf si dandeessisa. Fakkeenyaaf, XPath fayyadamuun elementii h2 murtaa'aa kan div keessa jiru kan battalumatti div obbolaa hordofu kan, dabaree isaatiin, qaama fakkii mucaa amaloota data-testID="leader" isa irratti qabu of keessaa qabu deebisuu dandeenya:
mata duree kana hin argatin
Mata duree kanas hin argatin
Mata duree fakkii geggeessaa
Gaaffiin kun: galmee.gaaffiiXPaths(` //qoqqoodinsa[. armaan gadii-obboleessa::div[1] /img[@data-testID='hogganaa']. ] /h2/ barruu() . `);
Mee akkamitti sun hundi akka walitti dhufu ilaaluuf demo tokko haa galchinu: Gaaffii H2 Complex Qalama [forked] kan Bryan Rasmussen barreesse ilaali. Kanaafuu, eeyyee. Qormaata XPath fayyadamuun karaaleen gara elementii kamiyyuu ta'uu danda'an baay'een jiru. XSLT 1.0 Xiqqeessuu Gareen Chrome deeggarsa XSLT 1.0 browser irraa haquuf karoorfachuu isaa jalqaba irratti kaaseen ture. Sun barbaachisaa dha sababiin isaas XSLT 1.0 jijjiirama galmeedhaaf sagantaa XML irratti xiyyeeffate fayyadama kunis dabaree isaatiin XPath 1.0 irratti hirkata, kunis waan biraawzaroota baay’ee keessatti argamudha. Yeroo sun ta’u, qaama ijoo XPath ni dhabna. Garuu XPath qormaata barreessuudhaaf dhuguma guddaa ta'uu isaa yoo ilaalle, XPath akka waliigalaatti yeroo dhiyootti baduu hin oolu jedheen yaada. Kana jechuun, namoonni yeroo amala tokko irraa fudhatamu fedhii akka qabaatan hubadheera. Sunis haala XSLT 1.0 hojiirra ooluu isaa keessatti dhugaa ta’uun isaa hin oolu. Mariin guutuun Hacker News irratti falmii xiqqeessuu mormuun guutame ta’aa jira. Barreeffamni mataan isaa fakkeenya guddaa XSLT waliin unka biloogii uumuudha. Atimarii ofii keetii dubbisuu dandeessa, garuu akkamitti JaavaScript akka shim XLST dhimmoota gosa sanaa akka qabatuuf itti fayyadamuu danda'u keessa seena. Akkasumas yaada biraawzaroota SaxonJS fayyadamuu akka qaban argeera, kunis buufata JavaScript’s Saxon XSLT, XQUERY, fi XPath engines dha. Sun yaada hawwataadha, keessumaa Saxon-JS gosa ammaa ibsitoota kanaa hojiirra oolcha, yeroo ta’u, biraawzari gosa XPath ykn XSLT kamiyyuu 1.0 ol hojiirra oolchu hin jiru, akkasumas kan XQuery hojiirra oolchu hin jiru. Norm Tovey-Walsh at Saxonica, dhaabbata SaxonJS fi gosoota motora Saxon biroo duuba jiru bira dhaqe. Akkana jedhe: “Gurgurataan biraawzari kamiyyuu SaxonJS akka ka’umsa teeknooloojiiwwan XML ammayyaa biraawzariitti walitti makuuf fudhachuuf fedhii yoo qabaate, isaan waliin mari’achuu keenyatti gammadna.”— Norm Tovey-Walsh
Garuu itti dabaluudhaanis: "Namni tokko SaxonJS bifa amma jiruun fudhachuun osoo hin jijjiiramne gara ijaarsa biraawzariitti gadi buusuun mala gaarii ta'a jedhee yoo yaade baay'een na ajaa'iba. Gurgurataan biraawzari, uumamaan biraawzaricha ijaaruu isaaniitiin, walitti makamuu sanatti sadarkaa baay'ee gadi fagoo ta'een kan nuti ‘alaa’ dandeenyu caalaa itti dhiyaachuu danda'a."— Norm Tovey-Walsh
Yaadni Tovey-Walsh kun beeksisa XSLT xiqqeessuu isaa gara torban tokko dura akka ta’e hubatamuu qaba. Xumura Itti fufuu fi itti fufuu nan danda'a ture. Garuu kun humna XPath agarsiisee fakkeenyota akkaataa itti itti fayyadaman waan guddaa galmaan ga'uuf agarsiisan hedduu akka isiniif kenne abdiin qaba. Fakkeenya gaarii teeknooloojii durii tuullaa biraawzari keessatti argamu kan har’as faayidaa hedduu qabu yoo ta’ellee, akka jiru beektee hin beekne ykn bira ga’uuf yaaddee hin beekne ta’ellee. Dubbisa Dabalataa
“Enhancing the Resiliency of Automated Web Tests with Natural Language” (ACM Digital Library) kan barreesse Maroun Ayli, Youssef Bakouny, Nader Jalloul, fi Rima KilanyBarreeffamni kun fakkeenyota XPath hedduu qormaata dandamachuu barreessuudhaaf kenna. XPath (MDN)Kun iddoo gaarii itti jalqabdu yoo ibsa teeknikaa akkaataa XPath itti hojjetu bal'inaan ibsu barbaadde. Barnoota XPath (ZVON)Barumsi kun barumsa mataa kootiif baay’ee kan na gargaaru ta’uu isaa argadheera, galata fakkeenya baay’ee fi ibsa ifa ta’eef. XPatherMeeshaan walqunnamtii kun kallattiin koodii wajjin akka hojjettu si gargaara.