Ilni fl-iżvilupp front-end twil biżżejjed biex nara xejra matul is-snin: żviluppaturi iżgħar jaħdmu b'paradigma ġdida ta 'programmazzjoni mingħajr ma jifhmu l-kuntest storiku tagħha. Huwa, ovvjament, li jinftiehem perfettament li ma tkunx taf xi ħaġa. Il-web hija post kbir ħafna b'sett divers ta' ħiliet u speċjalitajiet, u mhux dejjem nafu dak li ma nafux. It-tagħlim f'dan il-qasam huwa vjaġġ kontinwu aktar milli xi ħaġa li tiġri darba u tispiċċa. Każ fil-punt: Xi ħadd fit-tim tiegħi staqsa jekk kienx possibbli li tgħid jekk l-utenti jinnavigawx 'il bogħod minn tab partikolari fl-UI. Irrimarkajt l-avveniment ta 'qabel it-tniżżil ta' JavaScript. Iżda dawk li indirizzaw dan qabel jafu li dan huwa possibbli minħabba li ntlaqtu b'twissijiet dwar data mhux salvata fuq siti oħra, li għalihom beforeunload huwa każ ta 'użu tipiku. Irrimarkajt ukoll l-avvenimenti pageHide u visibilityChange lill-kollega tiegħi għal miżura tajba. Kif kont naf dwar dan? Minħabba li ħareġ fi proġett ieħor, mhux għax studjajt fuqu meta inizjalment tgħallimt JavaScript. Il-fatt hu li l-oqfsa front-end moderni qegħdin fuq l-ispallejn tal-ġganti tat-teknoloġija li qabilhom. Huma astratti prattiki ta 'żvilupp, ħafna drabi għal esperjenza aħjar ta' żviluppatur li tnaqqas, jew saħansitra telimina, il-ħtieġa li tkun taf jew tmiss dawk li tradizzjonalment kienu kunċetti essenzjali ta 'quddiem li kulħadd probabbilment kellu jkun jaf. Ikkunsidra l-Mudell tal-Oġġetti CSS (CSSOM). Għandek mnejn tistenna li kull min jaħdem fis-CSS u JavaScript għandu mazz ta 'esperjenza CSSOM hands-on, iżda dan mhux dejjem se jkun il-każ. Kien hemm proġett React għal sit tal-kummerċ elettroniku li ħdimt fuqu fejn kellna bżonn tagħbija stylesheet għall-fornitur tal-ħlas magħżul bħalissa. Il-problema kienet li l-stylesheet kienet qed titgħabba fuq kull paġna meta kienet verament meħtieġa biss fuq paġna speċifika. L-iżviluppatur inkarigat li jagħmel dan iseħħ qatt ma kien għabbi stylesheet b'mod dinamiku. Għal darb'oħra, dan jinftiehem totalment meta React jastratta l-approċċ tradizzjonali li jista' jkun ilħaqt għalih. Is-CSSOM x'aktarx mhux xi ħaġa li għandek bżonn fix-xogħol tiegħek ta' kuljum. Iżda huwa probabbli li jkollok bżonn jinteraġixxu magħha f'xi punt, anke f'każ ta 'darba. Dawn l-esperjenzi ispirawni biex nikteb dan l-artiklu. Hemm ħafna karatteristiċi u teknoloġiji eżistenti tal-web fis-selvaġġ li qatt ma tista’ tmisshom direttament fix-xogħol tiegħek ta’ kuljum. Forsi int pjuttost ġdid għall-iżvilupp tal-web u sempliċement m'intix konxju minnhom għaliex int mgħaddas fl-astrazzjoni ta 'qafas speċifiku li ma jeħtieġx li tkun taf fil-fond, jew saħansitra xejn. Qed nitkellem speċifikament dwar XML, li ħafna minna nafu li hija lingwa antika mhux totalment differenti mill-HTML. Qed inġib dan minħabba diskussjonijiet reċenti ta 'WHATWG li jissuġġerixxu li biċċa sinifikanti tal-munzell XML magħrufa bħala programmar XSLT għandha titneħħa mill-browsers. Dan huwa eżattament it-tip ta’ teknoloġija eqdem u eżistenti li kellna għal snin sħaħ li tista’ tintuża għal xi ħaġa prattika daqs is-sitwazzjoni tas-CSSOM li kien fiha t-tim tiegħi. Ħdimt ma' XSLT qabel? Ejja naraw jekk ninxfux ħafna f'din it-teknoloġija anzjani u nisfruttawx il-karatteristiċi tagħha barra mill-kuntest tal-XML biex nindirizzaw il-problemi tad-dinja reali llum. XPath: L-API Ċentrali L-iktar teknoloġija XML importanti li forsi hija l-aktar utli barra minn perspettiva XML dritta hija XPath, lingwa ta' mistoqsija li tippermettilek issib kwalunkwe nodu jew attribut f'siġra ta' markup b'element wieħed ta' għerq. Għandi affezzjoni personali għal XSLT, iżda dan jiddependi wkoll fuq XPath, u l-affezzjoni personali għandha titwarrab fl-importanza tal-klassifikazzjoni. L-argument għat-tneħħija ta 'XSLT ma jsemmi l-XPath, għalhekk nissuponi li għadu permess. Dak huwa tajjeb għax XPath huwa l-API ċentrali u l-aktar importanti f'dan is-sett ta 'teknoloġiji, speċjalment meta tipprova ssib xi ħaġa li tuża barra l-użu normali tal-XML. Huwa importanti għaliex, filwaqt li seletturi CSS jistgħu jintużaw biex isibu ħafna mill-elementi fil-paġna tiegħek, ma jistgħux isibuhom kollha. Barra minn hekk, is-seletturi CSS ma jistgħux jintużaw biex isibu element ibbażat fuq il-pożizzjoni attwali tiegħu fid-DOM. XPath jista. Issa, xi wħud minnkom li taqraw dan jistgħu jkunu jafu XPath, u xi wħud jistgħu ma jkunux. XPath huwa qasam ta 'teknoloġija pjuttost kbir, u ma nistax verament ngħallem l-affarijiet bażiċi kollha u wkoll nuruk affarijiet friski li tagħmel magħha f'artikolu wieħed bħal dan. Fil-fatt ippruvajt nikteb dak l-artikolu, iżda l-pubblikazzjoni medja Smashing Magazine ma tmurx aktar minn 5,000 kelma. I kien diġà f'aktar minn2,000 kelma filwaqt li nofs l-affarijiet bażiċi biss. Allura, jien ser nibda nagħmel affarijiet friski ma 'XPath u nagħtikom xi links li tista' tuża għall-affarijiet bażiċi jekk issib dan l-għalf interessanti. Jikkombinaw XPath & CSS XPath jista 'jagħmel ħafna affarijiet li s-seletturi tas-CSS ma jistgħux meta jfittxu elementi. Iżda s-seletturi tas-CSS jistgħu wkoll jagħmlu ftit affarijiet li XPath ma jistax, jiġifieri, ifittex elementi bl-isem tal-klassi.
CSS XPath .myClass /*[fih(@klassi, "myClass")]
F'dan l-eżempju, CSS jistaqsi elementi li fihom .myClass classname. Sadanittant, l-eżempju XPath jistaqsi elementi li fihom klassi ta 'attribut bis-sekwenza "myClass". Fi kliem ieħor, jagħżel elementi bi myClass fi kwalunkwe attribut, inklużi elementi bl-isem tal-klassi .myClass - kif ukoll elementi bi "myClass" fis-sekwenza, bħal .myClass2. XPath huwa usa 'f'dak is-sens. Allura, le. Mhux qed nissuġġerixxi li għandna nefgħu s-CSS u nibdew nagħżlu l-elementi kollha permezz ta 'XPath. Dak mhux il-punt. Il-punt huwa li XPath jista 'jagħmel affarijiet li CSS ma jistax u xorta jista' jkun utli ħafna, minkejja li hija teknoloġija eqdem fil-munzell tal-browser u ma tistax tidher ovvja mal-ewwel daqqa t'għajn. Ejja nużaw iż-żewġ teknoloġiji flimkien mhux biss għax nistgħu, iżda għax aħna ser nitgħallmu xi ħaġa dwar XPath fil-proċess, u tagħmilha għodda oħra fil-munzell tiegħek - waħda li forsi ma kontx taf ilha hemm il-ħin kollu! Il-problema hija li l-metodu document.evaluate ta 'JavaScript u l-metodi varji tas-seletturi tal-mistoqsijiet li nużaw mas-CSS APIs għal JavaScript huma inkompatibbli. Għamilt API ta' querying kompatibbli biex nibdew, għalkemm ċertament, ma ħsibtx ħafna fiha peress li huwa tluq minn dak li qed nagħmlu hawn. Hawn eżempju ta’ ħidma pjuttost sempliċi ta’ kostruttur ta’ query li jista’ jerġa’ jintuża: Ara l-Pen queryXPath [forked] minn Bryan Rasmussen. Żidt żewġ metodi fuq l-oġġett tad-dokument: queryCSSSelectors (li essenzjalment hija querySelectorAll) u queryXPaths. Dawn iż-żewġ jirritornaw oġġett queryResults:
{ queryType: nodi | spag | numru | boolean, riżultati: kwalunkwe[] // elementi html, elementi xml, kordi, numri, booleans, queryCSSSelectors: (query: string, emenda: boolean) => queryResults, queryXpaths: (query: string, emenda: boolean) => queryResults }
Il-funzjonijiet queryCSSSelectors u queryXpaths imexxu l-mistoqsija li tagħtihom fuq l-elementi fil-firxa tar-riżultati, sakemm il-firxa tar-riżultati tkun ta 'nodi tat-tip, ovvjament. Inkella, se jirritorna queryResult b'firxa vojta u tip ta 'nodi. Jekk il-proprjetà tal-emenda hija ssettjata għal vera, il-funzjonijiet jibdlu l-QueryResults tagħhom stess. Taħt l-ebda ċirkostanza dan m'għandu jintuża f'ambjent ta 'produzzjoni. Qed nagħmilha b'dan il-mod purament biex nuri l-effetti varji tal-użu taż-żewġ APIs tal-mistoqsijiet flimkien. Mistoqsijiet Eżempji Irrid nuri ftit eżempji ta 'mistoqsijiet XPath differenti li juru xi wħud mill-affarijiet qawwija li jistgħu jagħmlu u kif jistgħu jintużaw minflok approċċi oħra. L-ewwel eżempju huwa //li/text(). Dan jistaqsi l-elementi kollha li u jirritorna n-nodi tat-test tagħhom. Allura, kieku kellna nistaqsu l-HTML li ġej:
- wieħed
- żewġ
- tlieta
…dan hu dak li jintbagħat lura:
{"queryType":"xpathEvaluate","results":["wieħed","żewġ","tlieta"],"resultType":"string"}
Fi kliem ieħor, irridu nġibu l-firxa li ġejja: ["wieħed","żewġ","tlieta"]. Normalment, inti tistaqsi għall-elementi li tikseb dan, iddawwar ir-riżultat ta 'dik il-mistoqsija f'firxa, timmappa l-firxa, u tirritorna n-nodu tat-test ta' kull element. Imma nistgħu nagħmlu dan b'mod aktar konċiż b'XPath: document.queryXPaths("//li/text()").results.
Innota li l-mod biex tikseb node ta 'test huwa li tuża text(), li tidher qisha firma ta' funzjoni - u hija. Jirritorna n-nodu tat-test ta' element. Fl-eżempju tagħna, hemm tliet elementi li fil-markup, kull wieħed fih test ("wieħed", "tnejn", u "tlieta").
Ejja nħarsu lejn eżempju ieħor ta' mistoqsija text(). Assumi li dan huwa l-markup tagħna:
Ejja nikteb mistoqsija li tirritorna l-valur tal-attribut href: document.queryXPaths("//a[text() = 'Sign In']/@href").results.
Din hija mistoqsija XPath fuq id-dokument kurrenti, bħall-aħħar eżempju, iżda din id-darba nirritornaw l-attribut href ta 'link (element) li fih it-test "Sign In". L-attwali lurariżultat huwa ["/login.html"]. Ħarsa ġenerali tal-Funzjonijiet XPath Hemm numru ta 'funzjonijiet XPath, u inti probabilment m'intix familjari magħhom. Hemm diversi, naħseb, li ta 'min ikun jaf dwarhom, inklużi dawn li ġejjin:
jibda-biJekk test jibda b'eżempju partikolari ta' test ieħor, jibda-bi(@href, 'http:') jirritorna vera jekk attribut href jibda b'http:. containsJekk test fih eżempju partikolari ta' test ieħor, contains(text(), "Smashing Magazine") jirritorna vera jekk node test fih il-kliem "Smashing Magazine" fih kullimkien. countReturns għadd ta' kemm hemm logħbiet għal mistoqsija. Pereżempju, count(//*[starts-with(@href, 'http:']) jirritorna għadd ta' kemm links fin-node tal-kuntest għandhom elementi b'attribut href li fih it-test li jibda bil-http:. substringWorks bħal JavaScript substring, ħlief inti tgħaddi l-sekwenza bħala argument. Per eżempju, substring ("it-test tiegħi", 2, 4) jirritorna "y t". substring-before Jirritorna l-parti ta 'sekwenza qabel string oħra. Per eżempju, substing-before("test tiegħi", " ") jirritorna "tiegħi". Bl-istess mod, substring-before("hi","bye") jirritorna string vojta. substring-afterReturns il-parti ta' string wara string oħra. Per eżempju, substing-after("test tiegħi", " ") jirritorna "test". Bl-istess mod, substring-after("hi","bye") jirritorna string vojta. normalize-spaceIrritorna s-sekwenza ta' l-argumenti bl-ispazji bojod normalizzati billi tqaxxar l-ispazji bojod ta' quddiem u ta' wara u jissostitwixxu sekwenzi ta' karattri ta' spazju abjad bi spazju wieħed. notReturns boolean veru jekk l-argument huwa falz, inkella falz. trueReturns boolean veru. falseReturns boolean falz. concatL-istess ħaġa bħal JavaScript concat, ħlief li ma tħaddemx bħala metodu fuq string. Minflok, tpoġġi l-kordi kollha li trid tikkonkatena. string-lengthDan mhuwiex l-istess bħal JavaScript string-length, iżda pjuttost jirritorna t-tul tas-sekwenza li tingħata bħala argument. translateThis jieħu string u jibdel it-tieni argument għat-tielet argument. Per eżempju, translate("abcdef", "abc", "XYZ") joħroġ XYZdef.
Minbarra dawn il-funzjonijiet XPath partikolari, hemm għadd ta 'funzjonijiet oħra li jaħdmu l-istess bħall-kontropartijiet JavaScript tagħhom - jew kontropartijiet bażikament fi kwalunkwe lingwa ta' programmar - li inti probabilment issib ukoll utli, bħal art, saqaf, tondi, somma, eċċ. Id-demo li ġejja turi kull waħda minn dawn il-funzjonijiet: Ara l-Pin XPath Numerical functions [forked] minn Bryan Rasmussen. Innota li, bħall-biċċa l-kbira tal-funzjonijiet ta 'manipulazzjoni ta' string, ħafna minn dawk numeriċi jieħdu input wieħed. Dan, ovvjament, għaliex suppost jintużaw għall-mistoqsijiet, bħal fl-aħħar eżempju XPath: //li[floor(test()) > 250]/@val
Jekk tużahom, kif jagħmlu ħafna mill-eżempji, tispiċċa tħaddem fuq l-ewwel node li jaqbel mal-mogħdija. Hemm ukoll xi funzjonijiet ta 'konverżjoni tat-tip li probabbilment għandek tevita minħabba li JavaScript diġà għandu l-problemi ta' konverżjoni tat-tip tiegħu stess. Iżda jista 'jkun hemm drabi meta trid tikkonverti string għal numru sabiex tiċċekkjaha ma' xi numru ieħor. Funzjonijiet li jistabbilixxu t-tip ta 'xi ħaġa huma boolean, numru, string, u node. Dawn huma t-tipi tad-dejta XPath importanti. U kif tista 'timmaġina, ħafna minn dawn il-funzjonijiet jistgħu jintużaw fuq tipi ta' data li mhumiex nodi DOM. Pereżempju, substring-after jieħu string kif diġà koprejna, iżda jista 'jkun is-sekwenza minn attribut href. Tista' wkoll tkun sempliċiment string:
const testSubstringAfter = document.queryXPaths ("substring-after('hello world',' ')");
Ovvjament, dan l-eżempju se jagħtina lura l-firxa tar-riżultati bħala ["dinja"]. Biex nuri dan fl-azzjoni, għamilt paġna demo billi tuża funzjonijiet kontra affarijiet li mhumiex nodi DOM: Ara l-Pen queryXPath [forked] minn Bryan Rasmussen. Għandek tinnota l-aspett sorprendenti tal-funzjoni tat-traduzzjoni, li hija li jekk għandek karattru fit-tieni argument (jiġifieri, il-lista ta 'karattri li trid tiġi tradotta) u l-ebda karattru li jaqbel biex tittraduċi, dak il-karattru jitneħħa mill-output. Għalhekk, dan:
translate('Hello, Jisimni Inigo Montoya, inti qtilt lil missieri, ipprepara biex tmut','abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ,','*')
…riżultati fis-sekwenza, inklużi l-ispazji: [" * * ** "]
Dan ifisser li l-ittra “a” qed tiġi tradotta għal asterisk (*), iżda kull karattru ieħor li ma jkollux traduzzjoni minħabba s-sekwenza fil-mira jitneħħa kompletament. L-ispazju abjad huwa dak kollu li fadalbejn il-karattri tradotti “a”. Imbagħad għal darb'oħra, din il-mistoqsija:
translate('Hello, Jisimni Inigo Montoya, inti qtilt lil missieri, ipprepara biex tmut','abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ,','****************************************************')")
… m'għandux il-problema u joħroġ riżultat li jidher bħal dan:
"****** ** **** ** ***** ******* *** ****** ** ****** ******* ** ***"
Jista 'jolqok li m'hemm l-ebda mod faċli f'JavaScript biex tagħmel eżattament dak li tagħmel il-funzjoni ta' traduzzjoni XPath, għalkemm għal ħafna każijiet ta 'użu, replaceAll b'espressjonijiet regolari tista' tieħu ħsiebha. Tista 'tuża l-istess approċċ li wrejt, iżda dan huwa subottimali jekk kull ma trid hija li tittraduċi l-kordi. Id-demo li ġejja tinkludi l-funzjoni ta’ traduzzjoni ta’ XPath biex tipprovdi verżjoni JavaScript: Ara l-funzjoni tat-traduzzjoni tal-Pinna [forked] minn Bryan Rasmussen. Fejn tista' tuża xi ħaġa bħal din? Ikkunsidra l-encryption Caesar Cipher b'offset ta' tliet postijiet (eż., encryption top-of-the-line minn 48 QK):
translate("Ċesari qed jippjana li jaqsam ir-Rubikon!", "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz", "XYZABCDEFGHIJKLMNOPQRSTUVWxyzabcdefghijklmnopqrstuvw")
It-test tal-input "Caesar qed jippjana li jaqsam ir-Rubicon!" jirriżulta fi “Zxbpxo fp mixkkfkd ql zolpp qeb Oryfzlk!” Biex nagħti eżempju rapidu ieħor ta 'possibbiltajiet differenti, għamilt funzjoni tal-metall li tieħu input ta' string u tuża funzjoni ta 'traduċi biex tirritorna t-test, inklużi l-karattri kollha li jieħdu umlauts. Ara l-funzjoni tal-metall tal-Pinna [furketta] minn Bryan Rasmussen.
const metall = (str) => { return translate(str, "AOUaou","ÄÖÜäöü"); }
U, jekk jingħata t-test “Motley Crue rules, rock on dudes!”, jirritorna “Mötley Crüe rüles, röck ön düdes!” Ovvjament, wieħed jista 'jkollu kull xorta ta' użi parodija ta 'din il-funzjoni. Jekk dak int, allura dan l-artikolu TVTropes għandu jagħtik ħafna ispirazzjoni. L-użu tas-CSS ma 'XPath Ftakar ir-raġuni ewlenija tagħna għall-użu tas-seletturi tas-CSS flimkien ma 'XPath: CSS pjuttost jifhem x'inhi klassi, filwaqt li l-aħjar li tista' tagħmel b'XPath huwa t-tqabbil ta' string tal-attribut tal-klassi. Dan se jaħdem f'ħafna każijiet. Imma jekk qatt kellek tiltaqa' f'sitwazzjoni fejn, ngħidu aħna, xi ħadd ħoloq klassijiet bl-isem .primaryLinks u .primaryLinks2 u inti kont qed tuża XPath biex tikseb il-klassi .primaryLinks, allura x'aktarx ikollok problemi. Sakemm m'hemm xejn iblah bħal dan, inti probabilment tuża XPath. Imma d-dispjaċir nirrapporta li ħdimt f’postijiet fejn in-nies jagħmlu dawk it-tip ta’ affarijiet iblah. Hawn demo oħra li tuża CSS u XPath flimkien. Juri x'jiġri meta nużaw il-kodiċi biex inħaddmu XPath fuq node tal-kuntest li mhuwiex in-nodu tad-dokument. Ara l-Pinna css u xpath flimkien [forked] minn Bryan Rasmussen. Il-mistoqsija CSS hija .relatedarticles a, li jġib iż-żewġ elementi a f'div assenjata .relatedarticles klassi. Wara dan hemm tliet mistoqsijiet "ħżiena", jiġifieri, mistoqsijiet li ma jagħmlux dak li rridu li jagħmlu meta jaħdmu b'dawn l-elementi bħala n-nodu tal-kuntest. Kapaċi nispjega għaliex qed iġibu ruħhom b'mod differenti milli suppost tistenna. It-tliet mistoqsijiet ħżiena inkwistjoni huma:
//test(): Jirritorna t-test kollu fid-dokument. //a/text(): Jirritorna t-test kollu ġewwa l-links fid-dokument. ./a/text(): Ma jirritorna l-ebda riżultat.
Ir-raġuni għal dawn ir-riżultati hija li filwaqt li l-kuntest tiegħek huwa elementi rritornati mill-mistoqsija CSS, // tmur kontra d-dokument kollu. Din hija s-saħħa ta 'XPath; CSS ma jistax imur minn nodu sa antenat u mbagħad għal aħwa ta 'dak l-antenat, u jimxi 'l isfel għal dixxendent ta' dak l-aħwa. Iżda XPath jista '. Sadanittant, ./ jistaqsi lit-tfal tan-node kurrenti, fejn it-tikka (.) tirrappreżenta n-nodu kurrenti, u l-linja mmejla (/) tirrappreżenta li tmur f'xi nodu tifel - jekk huwiex attribut, element, jew test huwa determinat mill-parti li jmiss tal-mogħdija. Iżda m'hemm l-ebda element tifel magħżul mill-mistoqsija CSS, u b'hekk dik il-mistoqsija wkoll ma tirritorna xejn. Hemm tliet mistoqsijiet tajbin f'dik l-aħħar demo:
.//test(), ./test(), normalize-space(./test()).
Il-mistoqsija normalize-space turi l-użu tal-funzjoni XPath, iżda wkoll tiffissa problema inkluża fil-mistoqsijiet l-oħra. L-HTML huwa strutturat hekk:
Awtomatizzazzjoni tal-Ittestjar tal-Karatteristiċi Tiegħek B'Selenium WebDriver
Il-mistoqsija tirritorna line feed fil-bidu u fit-tmiem tan-node tat-test,u normalize-space tneħħi dan. L-użu ta' kwalunkwe funzjoni XPath li tirritorna xi ħaġa oħra għajr boolean b'input XPath japplika għal funzjonijiet oħra. Id-demo li ġejja turi numru ta’ eżempji: Ara l-eżempji tal-funzjonijiet Pen xpath [forked] minn Bryan Rasmussen. L-ewwel eżempju juri problema li għandek toqgħod attent għaliha. Speċifikament, il-kodiċi li ġej:
document.queryXPaths("substring-after(//a/@href,'https://')");
…jirritorna string waħda:
"www.smashingmagazine.com/2018/04/feature-testing-selenium-webdriver/"
Jagħmel sens, hux? Dawn il-funzjonijiet ma jirritornawx arrays iżda pjuttost kordi singoli jew numri singoli. It-tħaddim tal-funzjoni kullimkien b'riżultati multipli jirritorna biss l-ewwel riżultat. It-tieni riżultat juri dak li rridu verament:
document.queryCSSSelectors("a").queryXPaths("substring-after(./@href,'https://')");
Li jirritorna firxa ta’ żewġ kordi:
["www.smashingmagazine.com/2018/04/feature-testing-selenium-webdriver/","www.smashingmagazine.com/2022/11/automated-test-results-improve-accessibility/"]
Il-funzjonijiet XPath jistgħu jiġu mdaħħla bħal funzjonijiet f'JavaScript. Allura, jekk inkunu nafu l-istruttura tal-URL tal-Magazin Smashing, nistgħu nagħmlu dan li ġej (l-użu ta' literals tal-mudell huwa rakkomandat): `ittraduċi( substring( substring-after(./@href, 'www.smashingmagazine.com/') ,9), '/','')'
Dan qed isir daqsxejn kumpless wisq sal-punt li jeħtieġ kummenti li jiddeskrivu x'tagħmel: ħu l-URL kollu mill-attribut href wara www.smashingmagazine.com/, neħħi l-ewwel disa 'karattri, imbagħad ittraduċi l-karattru mmejla (/) għal xejn sabiex teħles mill-linja mmejla 'l quddiem tat-tmiem. Il-firxa li tirriżulta:
["feature-testing-selenium-webdriver","awtomatizzati-test-riżultati-titjib-aċċessibbiltà"]
Aktar Każijiet ta' Użu XPath XPath jista 'verament shine fl-ittestjar. Ir-raġuni mhix diffiċli biex tara, peress li XPath jista 'jintuża biex tikseb kull element fid-DOM, minn kwalunkwe pożizzjoni fid-DOM, filwaqt li CSS ma jistax. Ma tistax toqgħod fuq klassijiet CSS li jibqgħu konsistenti f'ħafna sistemi moderni tal-bini, iżda b'XPath, aħna kapaċi nagħmlu taqbiliet aktar robusti dwar x'inhu l-kontenut tat-test ta 'element, irrispettivament minn struttura DOM li tinbidel. Kien hemm riċerka dwar tekniki li jippermettulek tagħmel testijiet XPath reżiljenti. Xejn mhu agħar milli li t-testijiet jitfarrku u jfallu sempliċement minħabba li selettur CSS ma jibqax jaħdem minħabba li xi ħaġa ġiet imsemmija jew imneħħija. XPath huwa wkoll verament kbir fl-estrazzjoni ta 'lokatriċi multipli. Hemm aktar minn mod wieħed biex tuża mistoqsijiet XPath biex tqabbel element. L-istess jgħodd għas-CSS. Iżda l-mistoqsijiet XPath jistgħu jħaffru l-affarijiet b'mod aktar immirat li jillimita dak li jiġi rritornat, li jippermettilek issib taqbila speċifika fejn jista 'jkun hemm diversi logħbiet possibbli. Pereżempju, nistgħu nużaw XPath biex nirritornaw element speċifiku h2 li jinsab ġewwa div li jsegwi immedjatament div aħwa li, min-naħa tiegħu, fih element ta 'immaġni tat-tfal b'attribut data-testID="leader" fuqu:
ma tieħux dan it-titlu
La tieħux dan it-titlu lanqas
L-intestatura għall-immaġni tal-mexxej
Din hija l-mistoqsija: document.queryXPaths(` //div[ li ġej-aħwa::div[1] /img[@data-testID='mexxej'] ] /h2/ test() `);
Ejja nidħlu demo biex naraw kif dan kollu jingħaqad: Ara l-Mistoqsija Pen Complex H2 [furketta] minn Bryan Rasmussen. Allura, iva. Hemm ħafna mogħdijiet possibbli għal kwalunkwe element f'test li juża XPath. XSLT 1.0 Deprekazzjoni Semmejt kmieni li t-tim tal-Chrome qed jippjana li jneħħi l-appoġġ XSLT 1.0 mill-browser. Dak huwa importanti għaliex XSLT 1.0 juża programmazzjoni ffukata fuq XML għat-trasformazzjoni tad-dokumenti li, imbagħad, tiddependi fuq XPath 1.0, li huwa dak li jinstab fil-biċċa l-kbira tal-browsers. Meta jiġri hekk, aħna nitilfu komponent ewlieni ta 'XPath. Iżda minħabba l-fatt li XPath huwa verament kbir għall-kitba ta 'testijiet, insib improbabbli li XPath kollu kemm hu se jisparixxi ghaċ dalwaqt. Cela dit, innotajt li n-nies jinteressaw ruħhom f'karatteristika meta din titneħħa. U dan huwa ċertament minnu fil-każ ta 'XSLT 1.0 li jkun deprecated. Hemm diskussjoni sħiħa għaddejja fuq Hacker News mimlija b'argumenti kontra d-deprekazzjoni. Il-post innifsu huwa eżempju kbir ta 'ħolqien ta' qafas ta 'blogging ma' XSLT. Intitista 'taqra d-diskussjoni għalik innifsek, iżda tidħol f'kif JavaScript jista' jintuża bħala shim għal XLST biex jimmaniġġa dawk it-tipi ta 'każijiet. Rajt ukoll suġġerimenti li l-browsers għandhom jużaw SaxonJS, li huwa port għall-magni Saxon XSLT, XQUERY, u XPath ta' JavaScript. Dik hija idea interessanti, speċjalment peress li Saxon-JS jimplimenta l-verżjoni attwali ta 'dawn l-ispeċifikazzjonijiet, filwaqt li m'hemm l-ebda browser li jimplimenta xi verżjoni ta' XPath jew XSLT lil hinn minn 1.0, u l-ebda waħda li timplimenta XQuery. Lħaqt ma' Norm Tovey-Walsh f'Saxonica, il-kumpanija wara SaxonJS u verżjonijiet oħra tal-magna Saxon. Huwa qal: "Jekk xi bejjiegħ tal-brawżer kien interessat li jieħu SaxonJS bħala punt tat-tluq għall-integrazzjoni ta' teknoloġiji XML moderni fil-browser, inkunu ferħana niddiskutuha magħhom."— Norm Tovey-Walsh
Iżda żiedet ukoll: "Inkun sorpriż ħafna jekk xi ħadd jaħseb li tieħu SaxonJS fil-forma attwali tagħha u twaqqa' fil-browser build mhux mibdul ikun l-approċċ ideali. Bejjiegħ tal-browser, min-natura tal-fatt li jibnu l-browser, jista 'javviċina l-integrazzjoni f'livell ħafna aktar profond milli nistgħu 'minn barra'. "— Norm Tovey-Walsh
Ta 'min jinnota li l-kummenti ta' Tovey-Walsh ġew madwar ġimgħa qabel it-tħabbira ta 'deprecation XSLT. Konklużjoni Nista’ nibqa’ għaddej. Imma nispera li dan wera l-qawwa ta 'XPath u tak ħafna eżempji li juru kif tużah biex tikseb affarijiet kbar. Huwa eżempju perfett ta 'teknoloġija anzjani fil-munzell tal-browser li għad għandu ħafna utilità llum, anki jekk qatt ma kont taf li teżisti jew qatt ma qieset li tilħaqha. Aktar Qari
"Titjib tar-Reżiljenza tat-Testijiet tal-Web Awtomatizzati b'Lingwa Naturali" (Librerija Diġitali ACM) minn Maroun Ayli, Youssef Bakouny, Nader Jalloul, u Rima KilanyDan l-artikolu jipprovdi ħafna eżempji XPath għall-kitba ta 'testijiet reżiljenti. XPath (MDN)Dan huwa post eċċellenti biex tibda jekk trid spjegazzjoni teknika li tagħti dettalji dwar kif jaħdem XPath. XPath Tutorial (ZVON) Sibt dan it-tutorja bħala l-aktar utli fit-tagħlim tiegħi stess, grazzi għal minjiera ta 'eżempji u spjegazzjonijiet ċari. XPatherDin l-għodda interattiva tħallik taħdem direttament mal-kodiċi.