Ez têra xwe dirêj di pêşkeftina pêşîn de bûm ku bi salan meylek bibînim: pêşdebirên ciwan bi paradîgmayek nû ya bernamekirinê re dixebitin bêyî ku têgihîştina wê ya dîrokî. Bê guman, bi tevahî tê fêm kirin ku tiştek nizanin. Tevn cîhek pir mezin e bi komek jêhatîbûn û taybetmendiyên cihêreng, û em her gav nizanin tiştê ku em nizanin. Fêrbûna di vî warî de ji tiştekî ku carekê diqewime û bi dawî dibe rêwîtiyek domdar e. Mesele: Kesek ji tîmê min pirsî gelo gengaz e ku meriv bibêje ka bikarhêner ji tabloyek taybetî ya di UI-yê de diçin. Min bûyera berî barkirinê ya JavaScript destnîşan kir. Lê yên ku berê bi vê yekê re mijûl bûne dizanin ku ev yek mimkun e ji ber ku ew bi hişyariyên li ser daneyên neparastkirî yên li ser malperên din hatine xistin, ji bo ku berî dakêşandinê dozek karanîna gelemperî ye. Di heman demê de min ji bo pîvandina baş rûpelê Veşêre û dîtbarî biguherîne ji hevkarê xwe re destnîşan kir. Min li ser vê yekê çawa zanibû? Ji ber ku ew di projeyek din de derket, ne ji ber ku min dema ku di destpêkê de JavaScript fêr bûm li ser wê xwendibû. Rastî ev e ku çarçoveyên pêş-enda nûjen li ser milên dêwên teknolojiyê yên ku berî wan sekinîne. Ew pratîkên pêşkeftinê yên razber, bi gelemperî ji bo ezmûnek pêşdebirek çêtir a ku hewcedariya zanibe an destwerdana tiştên ku bi kevneşopî têgînên pêşîn ên bingehîn in kêm dike, an jî ji holê radike, dibe ku divê her kes bizanibe. Modela CSS Object (CSSOM) bifikirin. Dibe ku hûn li bendê bin ku her kesê ku di CSS û JavaScript-ê de dixebite xwedan ezmûnek CSSOM-ya destan e, lê ew ê her gav ne wusa be. Ji bo malperek e-bazirganiya ku min lê dixebitî projeyek React hebû ku em hewce ne ku ji bo pêşkêşkarê dravdanê yê niha hilbijartî şêwazek bar bikin. Pirsgirêk ev bû ku şêwazê li ser her rûpelê bar dikir dema ku ew bi rastî li ser rûpelek taybetî hewce bû. Pêşdebirê ku ji bo pêkanîna vê yekê hatî peywirdar kirin, çu carî şêwazek dînamîkî bar nekiribû. Dîsa, dema ku React nêzîkatiya kevneşopî ya ku we dibe ku gihîştibin ji holê radike, ev bi tevahî tê fêm kirin. CSSOM îhtîmal e ku ne tiştek ku hûn di xebata xweya rojane de hewce ne. Lê îhtîmal e ku hûn ê hewce bikin ku di hin xalan de, tewra di mînakek yekcar de, pê re têkilî daynin. Van serpêhatiyan îlhama min da ku ez vê gotarê binivîsim. Di çolê de gelek taybetmendî û teknolojiyên webê yên heyî hene ku dibe ku hûn di karê xweya rojane de rasterast dest nedin wan. Dibe ku hûn di pêşkeftina malperê de pir nû ne û bi hêsanî ji wan nizanin ji ber ku hûn di nav abstrakasyona çarçoveyek taybetî de ne ku ne hewce ye ku hûn wê kûr, an jî qet zanibin. Ez bi taybetî li ser XML-ê dipeyivim, ku pir ji me pê dizanin zimanek kevnar e ku bi tevahî ji HTML-ê ne cûda ye. Ez vê yekê radigihînim ji ber nîqaşên vê dawî yên WHATWG ku pêşniyar dikin ku perçeyek girîng a stûna XML ya ku wekî bernamesaziya XSLT tê zanîn divê ji gerokan were rakirin. Ev tam teknolojiyek kevnar, heyî ya ku me bi salan heye ku dikare ji bo tiştek pratîkî wekî rewşa CSSOM ya ku tîmê min tê de bû were bikar anîn. Ma we berê bi XSLT re xebitî? Ka em bibînin ka em bi giranî serî li vê teknolojiya kevnar didin û taybetmendiyên wê li derveyî çarçoweya XML-ê bikar tînin da ku îro pirsgirêkên cîhana rastîn çareser bikin. XPath: API-ya navendî Teknolojiya XML ya herî girîng a ku belkî ji derveyî perspektîfek XML ya rasterast ya herî bikêr e XPath e, zimanek pirsê ye ku dihêle hûn di dara nîşankirinê de bi yek hêmanek root her nodek an taybetmendiyek bibînin. Hezkirinek min a kesane ji XSLT re heye, lê ew jî xwe dispêre XPath, û evîna kesane divê di girîngiya rêzkirinê de were guheztin. Argumana rakirina XSLT behsa XPath nake, ji ber vê yekê ez difikirim ku ew hîn jî destûr e. Ew baş e ji ber ku XPath di vê komika teknolojiyê de API-ya navendî û herî girîng e, nemaze dema ku hûn hewl didin ku tiştek bibînin ku li derveyî karanîna normal XML bikar bînin. Girîng e ji ber ku, dema ku hilbijêrên CSS-ê dikarin werin bikar anîn da ku piraniya hêmanên di rûpela we de bibînin, ew nikanin wan hemî bibînin. Wekî din, hilbijêrên CSS-ê nikarin werin bikar anîn da ku hêmanek li ser bingeha pozîsyona wê ya heyî di DOM-ê de bibînin. XPath dikare. Naha, hin ji we ku vê yekê dixwînin dibe ku XPath zanibin, û hin jî dibe ku nebin. XPath qadek pir mezin a teknolojiyê ye, û ez bi rastî nikarim hemî bingehîn fêr bikim û di heman demê de di gotarek yekane de tiştên xweş nîşanî we bidim ku hûn pê re bikin. Min bi rastî hewl da ku wê gotarê binivîsim, lê weşana navînî ya Kovara Smashing ji 5,000 peyvan derbas nabe. Ez jixwe li ser zêdetir bû2,000 peyvan dema ku tenê di nîvê bingehîn de ye. Ji ber vê yekê, ez ê dest bi kirina tiştên xweş bi XPath bikim û hin girêdan bidim we ku hûn dikarin ji bo bingehîn bikar bînin ger hûn van tiştan balkêş bibînin. XPath & CSS tevlihev kirin XPath dikare gelek tiştan bike ku hilbijêrên CSS-ê dema ku hêmanan dipirsin nikarin bikin. Lê hilbijêrên CSS di heman demê de dikarin çend tiştan bikin ku XPath nekare, ango, hêmanên bi navê polê bipirsin.

CSS XPath .myClass /*[dihewîne(@class, "myClass")]

Di vê nimûneyê de, CSS hêmanên ku navek dersa .myClass dihewîne dipirse. Di vê navberê de, mînaka XPath hêmanên ku çînek taybetmendiyê bi rêzika "myClass" vedihewîne dipirse. Bi gotineke din, ew hêmanên bi myClass di her taybetmendiyê de hildibijêre, di nav de hêmanên bi navê polê .myClass - û her weha hêmanên bi "myClass" di rêzikê de, wek .myClass2. XPath di wê wateyê de berfirehtir e. Ji ber vê yekê, na. Ez pêşniyar nakim ku divê em CSS-ê bavêjin û dest bi hilbijartina hemî hêmanan bi rêya XPath bikin. Ev ne mesele ye. Mesele ev e ku XPath dikare tiştên ku CSS nekare bike û hîn jî dikare pir bikêr be, her çend ew teknolojiyek kevntir e di stûyê gerokê de û dibe ku di nihêrîna pêşîn de eşkere xuya neke. Werin em her du teknolojiyên bi hev re bikar bînin ne tenê ji ber ku em dikarin, lê ji ber ku em ê di pêvajoyê de tiştek di derbarê XPath de fêr bibin, wê bikin amûrek din di stûyê we de - yek ku we belkî nizanibûya her dem li wir bû! Pirsgirêk ev e ku rêbaza document.evaluate ya JavaScript û awayên cihêreng ên hilbijêrê yên pirsê ku em bi API-yên CSS-ê yên ji bo JavaScript-ê re bikar tînin li hev nayên. Min API-ya lêpirsînê ya lihevhatî çêkir da ku me dest pê bike, her çend bê guman, min pir fikir nekiriye ji ber ku ew ji tiştê ku em li vir dikin dûrketinek e. Li vir mînakek xebatê ya pir hêsan a çêkerek lêpirsînê ya ji nû ve bi kar anîn heye: Ji hêla Bryan Rasmussen ve li ser pen queryXPath [forked] binêre. Min du rêbaz li ser objekta belgeyê zêde kirine: queryCSSSelectors (ku bi bingehîn querySelectorAll e) û queryXPaths. Ev her du jî tiştekî queryResults vedigerînin:

{ queryType: nodes | string | hejmar | boolean, encam: her[] // hêmanên html, hêmanên xml, rêzik, jimar, boolean, Hilbijêrên queryCSSS: (pirsîn: string, biguherîne: boolean) => queryEncam, queryXpaths: (pirsîn: string, biguherîne: boolean) => queryEncam }

Fonksiyonên queryCSSSelectors û queryXpaths pirsa ku hûn didin wan li ser hêmanên di rêzika encaman de dimeşînin, heya ku rêzika encam ji celebên girêkan be, bê guman. Wekî din, ew ê queryResult bi rêzek vala û celebek girêkan vegerîne. Ger taybetmendiya guheztinê wekî rast were danîn, fonksiyon dê Encamên pirsa xwe biguhezînin. Di bin şert û mercan de divê ev di hawîrdora hilberînê de neyê bikar anîn. Ez bi vî rengî tenê dikim ku bandorên cihêreng ên karanîna du API-yên pirsê bi hev re nîşan bidim. Nimûne Pirs Ez dixwazim çend mînakên pirsên XPath-ê yên cihêreng nîşan bidim ku hin tiştên hêzdar ên ku ew dikarin bikin û çawa dikarin li şûna nêzîkatiyên din werin bikar anîn destnîşan dikin. Mînaka yekem //li/text(). Ev li hemî hêmanan dipirse û girêkên nivîsa wan vedigerîne. Ji ber vê yekê, heke em HTML-ya jêrîn bipirsin:

  • yek
  • du

... ev e ya ku tê vegerandin:

{"queryType":"xpathEvaluate","encam":["yek","du","sê"],"resultType":"string"}

Bi gotineke din, em rêzika jêrîn digirin: ["yek", "du", "sê"]. Bi gelemperî, hûn ê ji hêmanên li bipirsin da ku wiya bi dest bixin, encama wê pirsê veguherînin rêzek, rêzê nexşeyê bikin, û girêka nivîsê ya her elementê vegerînin. Lê em dikarin wê bi XPath re bi kurtasî bikin: document.queryXPaths("//li/text()").encam.

Bala xwe bidinê ku awayê bidestxistina nodek nivîsê karanîna nivîsê ye (), ku dişibihe nîşanek fonksiyonê - û ew e. Ew girêka nivîsê ya hêmanekê vedigerîne. Di nimûneya me de, di nîşankirinê de sê hêmanên li hene, ku her yek nivîsek heye ("yek", "du", û "sê"). Ka em li mînakek din a pirsnameyek nivîsê () binêrin. Bifikirin ku ev nîşana me ye: Têkeve

Ka em pirsek binivîsin ku nirxa taybetmendiya href vedigerîne: document.queryXPaths("//a[text() = 'Têkeve']/@href").encam.

Ev pirsek XPath li ser belgeya heyî ye, mîna mînaka paşîn, lê vê carê em taybetmendiya href ya girêdanek (hêmanek) ku nivîsa "Têkevin" vedigerînin. Ya rastî vegeriyaencam ["/login.html"] ye. Pêşniyara fonksiyonên XPath Gelek fonksiyonên XPath hene, û dibe ku hûn bi wan re nenas in. Gelek hene, ez difikirim, ku hêjayî zanînê ne, di nav de yên jêrîn:

starts-withEger metnek bi mînakek nivîsek din a taybetî dest pê bike, starts-with(@href, 'http:') rast vedigere ger taybetmendiyek href bi http: dest pê bike. dihewîneHeke nivîsek mînakek nivîsek din a taybetî hebe, dihewîne(text(), "Kovara Smashing") heke girêkek nivîsê li her deverekê bêjeyên "Kovara Smashing" hebe, rast vedigere. count jimareya çend hevberdanê li pirsekê vedigerîne. Mînakî, count(//*[starts-with(@href, 'http:']) jimareyek vedigerîne ka çend lînkên di girêka kontekstê de hêmanên bi taybetmendiya href hene ku nivîsa ku bi http: dest pê dike vedihewîne. substringWek binesaziya JavaScriptê dixebite, ji bilî ku hûn rêzê wekî arguman derbas bikin. Mînakî, substring ("nivîsara min", 2, 4) "y t" vedigerîne. substring-before Parçeyek rêzikek berî rêzek din vedigerîne. Mînakî, substing-before("nivîsara min", "") "min" vedigerîne. Bi heman awayî, substring-before("hi","bye") rêzikek vala vedigerîne. substring-after Parçeyek rêzikek li dû rêzek din vedigerîne. Mînakî, substing-after("nivîsara min", "") "text" vedigerîne. Bi heman awayî, substring-after("hi","bye") rêzikek vala vedigerîne. normalize-space Vedigere rêzika argumana bi valahiya spî ya ku bi jêkirina cîhê spî yê sereke û paşverû û bi cîhkirina rêzikên tîpên valahiyê bi yek valahiyê ve hatî normalîzekirin. eger argûman xelet be, wekî din jî xelet be, rastiyek boolean vedigerîne. trueVegere boolean rast. falseVegere nerastiya boolean. concat Heman tişt wekî JavaScript-ê concat, ji bilî ku hûn wê wekî rêbazek li ser rêzek nemeşînin. Di şûna wê de, hûn hemî rêzikên ku hûn dixwazin bi hev ve girêdin têxin nav xwe. string-lengthEv ne heman dirêjahiya rêzika JavaScriptê ye, lê berevajî dirêjahiya rêzika ku wekî arguman hatiye dayîn vedigerîne. translateThis rêzek digire û argumana duyemîn diguherîne argumana sêyemîn. Mînakî, werger ("abcdef", "abc", "XYZ") XYZdef derdixe.

Ji xeynî van fonksiyonên XPath-ê yên taybetî, hejmarek fonksiyonên din jî hene ku mîna hevpîşeyên wan ên JavaScript-an jî hevpîşeyên wan di bingeh de her zimanek bernamesaziyê de dixebitin - ku hûn ê belkî jî bikêrhatî bibînin, wek qat, tavan, dor, sum, û hwd. Demoya jêrîn her yek ji van fonksiyonan destnîşan dike: Binêre Fonksiyonên hejmarî yên Pen XPath [jihevkirî] ji hêla Bryan Rasmussen ve. Bala xwe bidinê ku, mîna piraniya fonksiyonên manîpulasyona rêzikê, gelek ji yên jimareyî yek têketinê digirin. Ev, bê guman, ji ber ku ew ji bo lêpirsînê têne bikar anîn, wekî mînaka paşîn a XPath: //li[qatî(text()) > 250]/@val

Ger hûn wan bikar bînin, wekî ku piraniya mînakan dikin, hûn ê wê li ser girêka yekem a ku rê li hev digire biqedînin. Di heman demê de hin fonksiyonên guheztina celebê jî hene ku hûn belkî ji wan dûr bixin ji ber ku JavaScript jixwe pirsgirêkên veguheztina celebê xwe heye. Lê dibe ku carinan hebe ku hûn dixwazin rêzek bi jimareyek veguherînin da ku wê li hember hejmarek din kontrol bikin. Fonksiyonên ku cureyê tiştekî destnîşan dikin, boolean, hejmar, string, û node ne. Ev celebên daneyên XPath-ê yên girîng in. Û wekî ku hûn difikirin, piraniya van fonksiyonan dikarin li ser celebên daneyên ku ne nodên DOM-ê ne werin bikar anîn. Mînakî, substring-after xêzek digire wekî ku me berê vekiriye, lê dibe ku ew rêzek ji taybetmendiyek href be. Di heman demê de ew dikare tenê rêzek be:

const testSubstringAfter = document.queryXPaths("substring-after('silav dinya',' ')");

Eşkere ye, ev mînak dê encamên array wekî ["cîhan"] ji me re vegerîne. Ji bo ku vê yekê di çalakiyê de nîşan bidim, min rûpelek demo çêkir ku fonksiyonên li dijî tiştên ku ne nodên DOM-ê ne bikar tîne: Ji hêla Bryan Rasmussen ve li ser pen queryXPath [forked] binêre. Pêdivî ye ku hûn aliyek sosret a fonksiyona wergerandinê bala xwe bidinê, ev e ku heke we di argumana duyemîn de karakterek hebe (ango navnîşa tîpên ku hûn dixwazin werin wergerandin) û karakterek lihevhatî tune ku hûn jê re werin wergerandin, ew karakter ji derketinê tê derxistin. Bi vî awayî, ev:

wergerîne('Silav, Navê min Inigo Montoya ye, te bavê min kuşt, xwe ji mirinê re amade bike','abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ,','*')

...encamên di rêzê de, tevî cihan: ["***"]

Ev tê wê wateyê ku tîpa "a" bi stêrkek (*) tê wergerandin, lê her karakterek din a ku werger tune ye rêzika armancê bi tevahî tê rakirin. Cihê spî her tiştê me mayedi navbera tîpên "a" yên wergerandî de. Hingê dîsa, ev pirs:

translate('Silav, Navê min Inigo Montoya ye, te bavê min kuşt, xwe ji mirinê re amade bike','abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ,','****************************************************')")

... pirsgirêk nîne û encamek bi vî rengî derdixe:

"***** ** **** ** ***** ******* *** ***** * ***** ***** ***** ** ***"

Dibe ku we bihesibîne ku di JavaScriptê de rêyek hêsan tune ku meriv tam ya ku fonksiyona wergera XPath dike, bike, her çend ji bo gelek rewşên karanînê, Hemî bi vegotinên birêkûpêk biguhezîne dikare wê bike. Hûn dikarin heman nêzîkatiya ku min destnîşan kiriye bikar bînin, lê ger tiştê ku hûn dixwazin wergerandina rêzan be ew nebaş e. Demoya jêrîn fonksiyona wergerandinê ya XPath vedigire da ku guhertoyek JavaScript peyda bike: Binêre fonksiyona wergerandina pênûsê [forked] ji hêla Bryan Rasmussen. Hûn dikarin li ku derê tiştek mîna vê bikar bînin? Şîfrekirina Caesar Cipher-ê bi sê-cîh veqetandî (mînak, şîfrekirina jorîn a ji 48 B.Z.) binirxînin:

translate("Qeyser plan dike ku Rubicon derbas bike!", "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz", "XYZABCDEFGHIJKLMNOPQRSTUVWxyzabcdefghijklmnopqrstuvw")

Nivîsa têketinê "Qeyser plan dike ku Rubicon derbas bike!" encam di "Zxbpxo fp mixkkfkd ql zolpp qeb Oryfzlk!" Ji bo ku ez mînakek bilez a îmkanên cihêreng bidim, min fonksiyonek metal çêkir ku têketina rêzê digire û fonksiyonek werger bikar tîne da ku nivîsê vegerîne, tevî hemî karakterên ku umlautan digirin. Binêre fonksiyona metalê ya Pen [forked] ji hêla Bryan Rasmussen.

const metal = (str) => { werger werger (str, "AOUaou","ÄÖÜäöü"); }

Û, heke nivîsa "Motley Crue qaîdeyên, rock li dudes!", vedigere "Mötley Crüe rüles, röck ön düdes!" Eşkere ye ku meriv dikare her cûre karanîna parodî ya vê fonksiyonê hebe. Ger ew hûn in, wê hingê ev gotara TVTropes divê ji we re gelek îlhamê peyda bike. Bi XPath re CSS bikar bînin Sedema meya sereke ya karanîna hilbijêrên CSS-ê bi XPath-ê re bi bîr bînin: CSS pir pir fam dike ku çînek çi ye, di heman demê de ya çêtirîn ku hûn dikarin bi XPath-ê bikin berawirdkirina rêzika taybetmendiya polê ye. Ew ê di pir rewşan de bixebite. Lê heke hûn çu carî têkeve rewşek ku, bêje, kesek çînên bi navên .primaryLinks û .primaryLinks2 afirandine û we XPath bikar tîne da ku hûn çîna .primaryLinks bi dest bixin, wê hingê dibe ku hûn bikevin pirsgirêkan. Heya ku tiştek wusa bêaqil tune, hûn ê belkî XPath bikar bînin. Lê ez xemgîn im ku ez radigihînim ku ez li cîhên ku mirov wan celebên bêaqil dikin xebitîm. Li vir demoyek din heye ku CSS û XPath bi hev re bikar tîne. Ew destnîşan dike ka çi diqewime dema ku em kodê bikar tînin da ku XPathek li ser girêkek çarçoveyê ku ne girêka belgeyê ye bimeşîne. Binêre Pen css û xpath bi hev re [forked] ji hêla Bryan Rasmussen. Pirsa CSS-ê .relatedarticles a ye, ku du hêmanên a-yê di nav div-ê de ku çînek .relatedarticles hatî veqetandin digire. Piştî vê yekê sê pirsên "xirab" hene, ango pirsên ku dema ku bi van hêmanan re wekî girêka çarçovê dimeşînin tiştê ku em dixwazin bikin nakin. Ez dikarim rave bikim ka çima ew ji ya ku hûn hêvî dikin cûda tevdigerin. Sê pirsên xirab ên di pirsê de ne:

//text(): Hemû nivîsa di belgeyê de vedigerîne. //a/text(): Hemî nivîsa di hundurê lînkên belgeyê de vedigerîne. ./a/text(): Bê encam vedigere.

Sedema van encaman ev e ku dema ku naveroka we hêmanek e ku ji lêpirsîna CSS vegerî ye, // li dijî tevahiya belgeyê derdikeve. Ev hêza XPath e; CSS nikare ji girêkekê biçe ser bavekî û dûv re jî berbi xwişk û birayekî wî bavkalî ve, û ber bi dûndana wî birakî ve bimeşe. Lê XPath dikare. Di vê navberê de, ./ ji zarokên girêka heyî dipirse, li ku derê xala (.) girêka heyî nîşan dide, û qertafa pêş (/) çûna ber bi hin girêka zarokê ve nîşan dide - gelo ew taybetmendiyek, hêmanek, an nivîsar e ji hêla beşa paşîn a rê ve tê destnîşankirin. Lê hêmanek zarokek tune ku ji hêla lêpirsîna CSS ve hatî hilbijartin, ji ber vê yekê ew pirs jî tiştek venagerîne. Di wê demoya paşîn de sê pirsên baş hene:

.//text(), ./text(), normalize-space (./text()).

Lêpirsîna cîhê normalîzekirinê karanîna fonksiyona XPath destnîşan dike, lê di heman demê de pirsgirêkek ku di nav pirsên din de jî heye rast dike. HTML bi vî rengî hatî çêkirin:

Bi Selenium WebDriver re Testkirina Taybetmendiya Xwe Otomatîze bikin

Lêpirsîn li destpêk û dawiya girêka nivîsê xêzikek vedigerîne,û normalize-space vê jê dike. Bikaranîna her fonksiyonek XPath a ku ji bilî booleanek bi têketinek tiştek din vedigerîne XPath ji fonksiyonên din re derbas dibe. Demoya jêrîn çend mînakan nîşan dide: Nimûneyên fonksiyonên Pen xpath [forked] ji hêla Bryan Rasmussen ve bibînin. Mînaka yekem pirsgirêkek ku divê hûn lê temaşe bikin nîşan dide. Bi taybetî, koda jêrîn:

document.queryXPaths("substring-after(//a/@href,'https://')");

…yek rêzek vedigerîne:

"www.smashingmagazine.com/2018/04/feature-testing-selenium-webdriver/"

Ma watedar e, rast? Van fonksîyonan ne rêzikan vedigerînin, lê ji rêzên yekane an jî hejmarên yekane. Bi xebitandina fonksiyonê li her deverê bi gelek encaman re tenê encama yekem vedigere. Encama duyemîn nîşan dide ku em bi rastî çi dixwazin:

document.queryCSSSelectors("a").queryXPaths("substring-after(./@href,'https://')");

Ku komek ji du rêzan vedigerîne:

["www.smashingmagazine.com/2018/04/feature-testing-selenium-webdriver/","www.smashingmagazine.com/2022/11/automated-test-results-improve-accessibility/"]

Fonksiyonên XPath dikarin mîna fonksiyonên di JavaScriptê de nehêle. Ji ber vê yekê, heke em strukturên URL-ya Kovara Smashing dizanin, em dikarin jêrîn bikin (bikaranîna tîpên şablonê tê pêşniyar kirin): `wergerandin( binere( substring-after(./@href, 'www.smashingmagazine.com/') ,9), '/','')".

Ev piçek pir tevlihev dibe, qasê ku pêdivî bi şîroveyan heye ku ravekirina çi dike: hemî URL-ê ji taybetmendiya href piştî www.smashingmagazine.com/ bistînin, neh tîpên pêşîn jêkin, dûv re karaktera berevajî (/) wergerînin tiştekê, da ku hûn ji qertafa paşiya paşîn xilas bibin. Rêzeya encam:

["feature-testing-selenium-webdriver", "automated-test-results-improve-accessibility"]

Zêdetir Dozên Bikaranîna XPath XPath bi rastî dikare di ceribandinê de bibiriqe. Sedem ne dijwar e ku were dîtin, ji ber ku XPath dikare were bikar anîn da ku her hêmanek di DOM-ê de, ji her pozîsyonê di DOM-ê de bigire, lê CSS nikare. Hûn nekarin hesab bikin ku çînên CSS-ê di gelek pergalên avakirina nûjen de domdar dimînin, lê bi XPath re, em dikarin lihevhatinên bihêztir bikin ka naveroka nivîsê ya hêmanek çi ye, bêyî ku strukturek DOM-ê diguhezîne. Li ser teknîkên ku dihêlin hûn ceribandinên XPath-a berxwedêr çêbikin lêkolînek heye. Tiştek ji derxistina ceribandinan xirabtir nîne û têk diçe tenê ji ber ku hilbijêrek CSS êdî naxebite ji ber ku tiştek hate guheztin an jêbirin. XPath di derxistina cîhê pirjimar de jî bi rastî mezin e. Zêdetirî rêyek heye ku meriv pirsên XPath bikar bîne da ku hêmanek bihevre bike. Heman tişt bi CSS re jî rast e. Lê lêpirsînên XPath dikarin tiştan bi rengek bêtir armanckirî bişopînin ku tiştên ku têne vegerandin sînordar dike, ku dihêle hûn lihevhatinek taybetî bibînin ku dibe ku çend maçên gengaz hebin. Mînakî, em dikarin XPath bikar bînin da ku hêmanek h2-ya taybetî ya ku di hundurê div-ê de ye vegerîne ku tavilê li dû xwişk û birayên div-ya ku, di encamê de, hêmanek wêneya zarokê bi taybetmendiyek data-testID = "rêber" li ser vedihewîne, vedigire:

vê sernivîsê nebînin

Vê sernivîsê jî nebînin

Sernivîsa wêneya rêber

Ev pirs e: document.queryXPaths(` //div[ jêr-bira::div[1] /img[@data-testID='serok'] ] /h2/ text() `);

Ka em demoyek davêjin da ku bibînin ka ew çawa tev li hev tê: Binêre Pen Complex H2 Query [forked] ji hêla Bryan Rasmussen. Ji ber vê yekê, erê. Di ceribandinek bi karanîna XPath de ji her hêmanek re gelek rêyên gengaz hene. XSLT 1.0 Deprecation Min berê behs kir ku tîmê Chrome plan dike ku piştgiriya XSLT 1.0 ji gerokê rake. Ew girîng e ji ber ku XSLT 1.0 ji bo veguheztina belgeyê bernamekirina XML-fokuskirî bikar tîne ku, di encamê de, xwe dispêre XPath 1.0, ya ku di pir gerokan de tê dîtin. Dema ku ew diqewime, em ê beşek sereke ya XPath winda bikin. Lê ji ber vê rastiyê ku XPath ji bo nivîsandina ceribandinan bi rastî pir mezin e, ez ne mimkûn dibînim ku XPath bi tevahî di demek nêzîk de winda bibe. Wê got, min bala xwe dayê ku dema ku ew jê tê derxistin mirov bi taybetmendiyekê re eleqedar dibin. Û ew bê guman di doza ku XSLT 1.0 de hatî hilweşandin rast e. Li Hacker News bi argumanên li dijî hilweşandinê tijî nîqaşek tevahî heye. Post bi xwe mînakek girîng a afirandina çarçoveyek bloggeriyê bi XSLT re ye. Hûndikare nîqaşê ji xwe re bixwîne, lê ew digihîje ka çawa dibe ku JavaScript ji bo XLST-ê wekî şimek were bikar anîn da ku bi wan celeb bûyeran re mijûl bibe. Di heman demê de min pêşniyar dît ku gerok divê SaxonJS-ê bikar bînin, ku portek ji motorên Saxon XSLT, XQUERY, û XPath-ê JavaScript-ê ye. Ew ramanek balkêş e, nemaze ji ber ku Saxon-JS guhertoya heyî ya van taybetmendiyan bicîh tîne, lê gerokek tune ku guhertoyek XPath an XSLT ji 1.0-ê wêdetir bicîh bîne, û yek jî tune ku XQuery bicîh tîne. Ez gihîştim Norm Tovey-Walsh li Saxonica, pargîdaniya pişt SaxonJS û guhertoyên din ên motora Saxon. Wî got: "Ger firoşkerek gerokê eleqedar bû ku SaxonJS wekî xalek destpêkek ji bo yekkirina teknolojiyên nûjen XML di gerokê de bigire, em ê kêfxweş bibin ku em bi wan re nîqaş bikin." - Norm Tovey-Walsh

Lê zêde kir jî: "Ez ê pir ecêbmayî bimînim eger kesek bifikire ku girtina SaxonJS di forma xweya heyî de û avêtina wê di nav avakirina gerokê de neguhêrbar dê nêzîkatiya îdeal be. Firoşkarek gerokê, ji hêla xwezayê ve ku ew gerokê çêdike, dikaribû di astek pir kûrtir de nêzikî entegrasyonê bibe ji ya ku em dikarin 'ji derve'." - Norm Tovey-Walsh

Hêjayî gotinê ye ku şîroveyên Tovey-Walsh bi qasî hefteyek beriya ragihandina betalkirina XSLT hatin. Encam Ez dikarim herim û biçim. Lê ez hêvî dikim ku vê yekê hêza XPath nîşan daye û gelek mînakan daye we ku nîşan dide ka meriv wê çawa ji bo bidestxistina tiştên mezin bikar tîne. Ew mînakek bêkêmasî ya teknolojiya kevnar a di stûyê gerokê de ye ku îro hîn jî gelek jêhatî ye, tewra ku we qet nizanibû ku ew heye an jî qet nefikirîye ku bigihîje wê. Bêtir Xwendina

"Bi Zimanê Xwezayî Zehfkirina Tehlîlên Xweser ên Webê" (Pirtûkxaneya Dîjîtal a ACM) ji hêla Maroun Ayli, Youssef Bakouny, Nader Jalloul, û Rima KilanyEv gotar ji bo nivîsandina ceribandinên berxwedêr gelek mînakên XPath peyda dike. XPath (MDN) Ger hûn ravekirinek teknîkî dixwazin ku bi hûrgulî ka XPath çawa dixebite ev cîhek hêja ye ku meriv dest pê bike. XPath Tutorial (ZVON) Min dît ku ev tutorial di fêrbûna min de ya herî alîkar e, bi saya gelek mînakan û ravekirinên zelal. XPatherEv amûra înteraktîf dihêle hûn rasterast bi kodê re bixebitin.

You May Also Like

Enjoyed This Article?

Get weekly tips on growing your audience and monetizing your content — straight to your inbox.

No spam. Join 138,000+ creators. Unsubscribe anytime.

Create Your Free Bio Page

Join 138,000+ creators on Seemless.

Get Started Free