Hva er DOM i Selenium WebDriver? Struktur og full form
โก Smart oppsummering
Dokumentobjektmodellen eksponerer en HTML-side for JavaSkript som et tre av objekter, slik at skript og Selenium WebDriver leser, finner og endrer ethvert element pรฅ siden mens nettleseren kjรธrer.
Hva er DOM i Selenium WebDriver?
DOM in Selenium WebDriver er en viktig del av webutvikling ved hjelp av HTML5 og JavaManus. Den fullstendige formen for DOM er Document Object Model. DOM er ikke et datavitenskapelig konsept. Det er et enkelt sett med grensesnitt standardisert blant nettutviklere for รฅ fรฅ tilgang til og manipulere dokumenter i HTML eller XML ved hjelp av JavaManus.
Disse standardene hjelper utviklere med รฅ bygge en nettside uten รฅ bekymre seg for implementeringsdetaljer. Noen av organisasjonene som er involvert i standardisering av disse grensesnittene er som Mozilla, Apple, Microsoft, Google, Adobe osv. Det er imidlertid W3C som formaliserer en standard og publiserer den โ se her (https://dom.spec.whatwg.org/).
Avsnittene nedenfor dekker dokumentstruktur, objektene DOM-en eksponerer og hvordan man inspiserer dem. Mozilla beholder den gjeldende API-referansen pรฅ MDN-dokumentobjektmodellsider.
Hver Selenium locator lรธser opp mot dette samme treet, sรฅ strukturen nedenfor er det findElement() sรธk.
Forstรฅ DOM-strukturen
Du mรฅ forstรฅ DOM-strukturen hvis du bygger et nettsted som involverer skripting JavaManus. ร forstรฅ DOM er enda viktigere hvis du gjรธr en eller alle de fรธlgende kompliserte oppgavene pรฅ nettstedet ditt โ
- Utviklingping innhold som oppdaterer seg selv kontinuerlig uten รฅ oppdatere hele siden โ som gjeldende pris pรฅ alle aksjene i brukerens portefรธlje
- Utviklingping avanserte brukerinteraksjoner, som รฅ legge til eller endre innhold dynamisk โ som muligheten til รฅ legge til flere aksjer i portefรธljen din
- Utviklingping innhold som kan tilpasses av brukeren โ som muligheten til รฅ endre oppsettet slik at fondsportefรธljen vises fรธr aksjeportefรธljen
- Utviklingping responsivt innhold pรฅ nettstedet ditt, slik at nettstedet ditt automatisk tilpasser seg ulike medieskjermer, f.eks. iPhone, datamaskin, nettbrett osv.
En grunnleggende HTML-side
<!DOCTYPE html>
<meta charset="UTF-8">
<html>
<head>
<title>my page title</title>
</head>
<body>
<article>
<p>
my first article
</p>
</article>
<aside>side bar content</aside>
</body>
</html>
Hvordan ser det ut for en nettlesers DOM PARSER?
html > head > title
> body > aside
> article > p
Hvordan fรฅr du tilgang til kroppselementet?
<script>
var body = window.document.body;
</script>
Hvordan sier du "Hello World"?
<script>
var body = document.querySelector("body > article > p").innerHTML = "Hello World!";
</script>
Til slutt vil hele HTML-filen se ut
Open Windows Notisblokk og lim inn fรธlgende innhold i den. Lagre deretter filen som "MyFileNewFile.html" (sรธrg for at filnavnet slutter med .html).
<!DOCTYPE html> <meta charset="UTF-8"> <html> <head> <title>my page title</title> </head> <body> <article><p>my first article</p></article> <aside>side bar content</aside> <script> var body = document.querySelector("body > article > p").innerHTML = "Hello World!"; </script> </body> </html>
Til slutt รฅpner du bare filen ved รฅ bruke en av dine foretrukne nettlesere, og du vil se "Hello World!"
Komponenter av DOM i Selenium
Nedenfor er hovedkomponentene i DOM er Selenium WebDriver:
- Vindu
- Document
- Element
Hver komponent sitter pรฅ et annet nivรฅ i treet, og starter fra det ytterste.
Vindu
Window er objektet som inneholder dokumentobjektet i en DOM. Den sitter pรฅ toppen av alt.
For รฅ komme til et vindusobjekt fra et gitt dokument
<script>
var window = document.defaultView;
</script>
I et fanemiljรธ har hver fane sitt eget vindusobjekt. Men hvis man รธnsker รฅ fange opp og implementere hendelser som window.resizeTo og window.resizeBy, gjelder de for hele vinduet og ikke for fanen alene.
Egenskaper til Window Object i DOM
window.localStorage โ gir tilgang til nettleserens lokale lagring. Den lokale lagringen kan brukes til รฅ lagre og hente data fra en รธkt.
<script>
window.localStorage.setItem('name','xyz');
var name = window.localStorage.getItem('name');
</script>
vindu.รฅpner - henter referansen til vindusobjektet som รฅpnet dette vinduet (enten ved รฅ klikke pรฅ en lenke eller bruke window.open-metoden)
Nyttige metoder for vindusobjekt
window.alert() โ viser en varseldialog med en melding.
<script>
window.alert('say hello');
</script>
Det er mange nyttige hendelser som vindusobjektet viser. Vi vil diskutere dem i "Arrangementer"-delen under Advance Topics
Document
Dokumentet markerer begynnelsen pรฅ et DOM-tre. Dokumentet er den fรธrste noden i en DOM. Det har flere metoder og egenskaper, hvis omfang gjelder for hele dokumentet, som URL, getElementById, querySelector osv.
Egenskaper for dokumentobjekt i DOM
Document.documentURI og Dokument.URL โ Begge returnerer dokumentets nรฅvรฆrende plassering. Hvis dokumentet derimot ikke er av typen HTML-dokument.URL vil ikke fungere.
Document.activeElement โ Denne metoden returnerer elementet i DOM-en som er i fokus. Dette betyr at hvis en bruker erping I en tekstboks vil Document.activeElement returnere referanse til den tekstboksen.
Document.title โ Dette brukes til รฅ lese eller angi en tittel pรฅ et gitt dokument.
Nyttige metoder for dokumentobjekt
Document.getElementById(String id) โ dette er den klart mest relevante og nyttige metoden i DOM-manipulering. Den brukes til รฅ slรฅ opp et element i DOM-treet. ved hjelp av sin unike identifikatorOppslaget skiller mellom store og smรฅ bokstaver, dvs. i fรธlgende eksempel er ยซ โ-elementet kan ikke slรฅs opp med ord som IntroDiv eller introdiv eller iNtrodiv osv.
<!DOCTYPE html> <meta charset="UTF-8"> <html> <head></head> <body> <div id='introDiv'></div> <script> var label = Document.getElementById('introDiv'); label.setInnerHTML('say hello again'); </script> </body> </html>
Document.querySelectorAll(strengvelger) โ dette er en annen mye brukt metode for รฅ velge ett element til basert pรฅ regler for CSS-velger (Hvis du er kjent med jQuerys $-notasjon, bruker den i seg selv denne metoden). Vi skal ikke gรฅ sรฅ mye inn pรฅ CSS-selektorer. En CSS-selektor er et sett med regler som du kan bruke til รฅ fรฅ en liste over lignende elementer (basert pรฅ selektorregelen). Vi har brukt denne metoden fรธr i ยซHello Worldยป-delen.
Element
Diagrammet nedenfor viser hvordan et Element-objekt sitter inne i DOM-treet, under dokumentnoden.
Elementobjekt i DOM
Element er ethvert objekt representert av en node i et DOM-tre i et dokument. Som alltid er Element-objektet i seg selv bare en ulempe.tracav egenskaper, metoder og hendelser mellom en nettleser og et HTML-dokument. Det finnes spesielle typer elementer som HTMLElement, SVGElement, XULElement osv. Vi vil kun fokusere pรฅ HTMLElement i denne veiledningen.
Egenskaper for elementobjekt i DOM
Element.id โ Denne egenskapen kan brukes til รฅ angi eller lese "ID" (en unik identifikator) for et HTML-element. ID mรฅ vรฆre unik blant elementene i et DOM-tre. Som nevnt fรธr, brukes ID ogsรฅ av Document.getElementById-metoden for รฅ velge et bestemt Element-objekt i et DOM-tre.
HTMLElement.contentEditable โ contentEditable-egenskapen til et element bestemmer om innholdet er av det elementet er redigerbart/modifiserbart. Denne egenskapen kan settes som vist i skriptet nedenfor. Denne egenskapen kan ogsรฅ brukes til รฅ bestemme om et gitt element er redigerbart eller ikke. Prรธv fรธlgende skript i hvilken som helst HTML-tekst, og du vil legge merke til at du kan redigere innholdet i brรธdteksten.
<script>
document.body.contentEditable = true;
</script>
Element.innerHTML โ innerHTML er en annen viktig egenskap som vi bruker for รฅ fรฅ tilgang til HTML-innhold i et element. Den brukes ogsรฅ til รฅ angi nytt HTML-innhold for elementet. Det er mye brukt for รฅ sette/endre innholdet i datafelt. Si for eksempel at du vil at nettsiden din skal oppdatere temperaturen i Mumbai City hver time, du kan kjรธre skriptet i fรธlgende eksempel hver time.
<!DOCTYPE html> <meta charset="UTF-8"> <html> <head> <title>my page title</title> </head> <body> <section> <h1>Mumbai</h1> <h2>Temperature</h2> <span id='tempValue'></span><sup>o</sup>C </section> <script> document.getElementById('tempValue').innerHTML = '26'; </script> </body> </html>
Nyttige metoder for elementobjekt
HTMLElement.blur() & HTMLElement.focus() โ uskarphet og fokusmetoder brukes til รฅ fjerne fokus fra henholdsvis eller gi fokus til et HTML-element. Disse metodene er mest brukt for รฅ flytte fokuset til en markรธr mellom tekstbokser pรฅ en nettside for dataregistrering.
Element.querySelectorAll โ Denne metoden ligner den allerede diskuterte querySelector-metoden for dokumentobjektet. Denne metoden vil imidlertid begrense sรธket innenfor etterkommerne av selve elementet.
Nรธyaktighetsmerknad: Blokken ovenfor er gjengitt som publisert. Bruk av arbeidskode dokument med en liten d og innerHTML egenskap, ikke setInnerHTML().
Feilsรธking i DOM
Utviklerverktรธy av Google Chrome, Mozilla Firefox, Internet Explorer (10 eller hรธyere) eller Safari tillater enkel feilsรธking rett inne i nettleseren. Noen ganger tolker forskjellige nettlesere samme HTML-oppmerking forskjellig, og det er nรฅr feilsรธking hjelper deg รฅ inspisere DOM slik det har blitt tolket av den aktuelle nettleserens DOM-motor.
Merknad om nettleser: Internet Explorer ble pensjonert i 2022, sรฅ utviklerverktรธyene finnes nรฅ i Microsoft EdgeTrinnene nedenfor er uendret; DevTools รฅpnes med F12.
La oss nรฅ si at du vil endre temperaturverdien fra 26oC til 32oC i ditt siste eksempel. Vi vil ta noen enkle trinn for รฅ gjรธre det. Skjermbilder som vises her er fra Mozilla's Firefoxโ trinnene er imidlertid de samme i alle andre nettlesere.
- ร pne MyFileNewFile.html (eller hvilket navn du ga til HTML-filen i veiledningene ovenfor) ved รฅ bruke nettleseren din
-
Bruk musen og hรธyreklikk pรฅ temperaturverdien 26oC og klikk pรฅ "Inspiser element"
-
Legg merke til at elementet der du valgte รฅ "Inspisere element" vises uthevet i nettleseren din (feilsรธkingsvinduet vises vanligvis nederst pรฅ skjermen)
-
ร pne elementet ved รฅ klikke pรฅ den skrรฅstilte trekanten ved siden av det
-
Velg hva du vil redigere og dobbeltklikk pรฅ det. Du vil fรฅ en mulighet til รฅ endre teksten. Gjรธr som anvist i det animerte bildet nedenfor.
-
Legg merke til endringen i innholdet pรฅ HTML-siden din. Du kan lukke feilsรธkingsvinduet nรฅ.
Vรฆr oppmerksom pรฅ at endringene dine bare vil fortsette for denne รธkten. Sรฅ snart du laster inn eller oppdaterer (trykk F5) vil siden endres tilbake. Dette indikerer at du ikke endret den faktiske HTML-kilden, men bare den lokale tolkningen av nettleseren din.
Prรธv รฅ gjรธre fรธlgende som en morsom รธvelse. ร pne www.facebook.com i nettleseren din og bruk feilsรธkingsverktรธyet for รฅ fรธlge resultatet โ legg merke til hvordan det stรฅr ยซJeg har hacket Facebookยป.
Resultatet av รธvelsen ser ut som skjermbildet nedenfor.
Lesing og redigering av noder dekker statiske sider. Interaktive sider reagerer ogsรฅ pรฅ hva brukeren gjรธr.
DOM-hendelser
Hva er hendelser i DOM?
Hendelser er en programmeringsmodell der brukerutlรธste (eller nettlesersidens livssyklusutlรธste) hendelser kringkastes som meldinger. For eksempel, nรฅr en side er ferdig lastet, utlรธser den window.load-hendelsen og pรฅ lignende mรฅte nรฅr brukeren klikker pรฅ en knapp som elementets klikkhendelse utlรธses.
Disse meldingene kan fanges opp av alle JavaScript kode og deretter en utviklerdefinert handling kan tas. La oss for eksempel si at du รธnsker at tallene pรฅ nettsiden din bare skal oppdateres nรฅr brukeren klikker pรฅ en knapp. Du kan oppnรฅ dette ved hjelp av en av fรธlgende metoder โ
- Tilordne handling til onclick-hendelsen til HTML-elementet
- Tilordne handling til klikkhendelsen ved รฅ bruke addEventListener-metoden
Metode 1
<!DOCTYPE html>
<html>
<head>
<title>my page title</title>
</head>
<body>
<section>
<h1>Mumbai<h1>
<h2>Temperature</h2>
<span id='tempValue'></span><sup>o</sup>C
<br/>
<br/>
<button onclick='onRefreshClick()'>Refresh</button>
</section>
<script>
document.getElementById('tempValue').innerHTML = '26';
function onRefreshClick(e) {
document.getElementById('tempValue').innerHTML = '32';
}
</script>
</body>
</html>
Metode 2
<!DOCTYPE html>
<html>
<head>
<title>my page title</title>
</head>
<body>
<section>
<h1>Mumbai<h1>
<h2>Temperature</h2>
<span id='tempValue'></span><sup>o</sup>C
<br/>
<br/>
<button id='btnRefresh'>Refresh</button>
</section>
<script>
document.getElementById('tempValue').innerHTML = '26';
document.getElementById('btnRefresh').addEventListener('click', function(event) {
document.getElementById('tempValue').innerHTML = '32' },false);
</script>
</body>
</html>
Feilsรธking i DOM
Merknad om eldre API: To av svarene nedenfor bruker document.write(). Det kjรธrer fortsatt, men et kall etter sideinnlasting sletter dokumentet. Foretrekker console.log() eller innerHTML.
Sp. Hvordan vet jeg om et element eksisterer eller ikke?
A. Prรธv รฅ slรฅ opp elementet ved รฅ bruke en av velgerne og sjekk om elementet som returneres er en null. Se eksempel nedenfor -
if(document.getElementById("elementIDWhichIsNotPresentInDOM") === null) { //do something }
Q. Jeg fรฅr TypeError: document.getElementByID er ikke en funksjon...
A. Sรธrg for at metodenavnet samsvarer nรธyaktig med API-metoden. Som i spรธrsmรฅlet ovenfor - det er getElementById og ikke getElementByID.
Sp. Hva er forskjellen mellom barn og childNodes?
A. Metoden barn fรฅr oss samlingen av alle elementene innenfor det kallende elementet. Samlingen som returneres er av typen HTMLCollection. Imidlertid gir metoden childNodes oss samlingen av alle nodene i det kallende elementet. Legg til fรธlgende skript til vรฅrt eksempel og se forskjellen โ
childNodes-metoden returnerer 14 elementer
document.write("Using childNodes method") document.write("<br>"); document.write("<br>"); for(i=0;i<document.getElementsByTagName("section")[0].childNodes.length;i++) { document.write((i+1)+"."); document.write(document.getElementsByTagName("section")[0].childNodes[i].toString()); document.write("<br>"); } document.write("<br>"); document.write("Number of nodes in a section " + document.getElementsByTagName("section")[0].childNodes.length);
Mens barnemetoden returnerer bare 7 elementer
document.write("Using children method") document.write("<br>"); document.write("<br>"); for(i=0;i<document.getElementsByTagName("section")[0].children.length;i++) { document.write((i+1)+"."); document.write(document.getElementsByTagName("section")[0].children[i].toString()); document.write("<br>"); } document.write("<br>"); document.write("Number of nodes in a section " + document.getElementsByTagName("section")[0].children.length);
Q. Jeg fรฅr Uncaught TypeError: Kan ikke lese egenskapen 'innerHTML' til undefined...
A. Sรธrg for at forekomsten av HTMLElement du kaller egenskapen innerHTML pรฅ ble satt etter den fรธrste deklarasjonen. Denne feilen oppstรฅr vanligvis i fรธlgende scenario. Se hvordan feilen kan unngรฅs i neste kodeblokk...
var element; if(false) //say condition was false { element = document.getElementById('tempValue1'); } element.innerHTML = '32';
var element = null; if(false) //say condition was false { element = document.getElementById('tempValue1'); } if(element != null) { element.innerHTML = '32'; }






