Descriptive-ohjelmointi QTP/UFTDynaaminen ja staattinen
⚡ Älykäs yhteenveto
Descriptive-ohjelmointi antaa a:lle mahdollisuuden QTP or UFT Yksi lauseke sisältää itse objektin kuvauksen, ominaisuus-arvopareina tai Description-objekti, joten vaihe suoritetaan, vaikka objektia ei olisi koskaan tallennettu objektisäilöön.
Mikä on Descriptive ohjelmointi?
Descriptive ohjelmointi käytetään suorittamaan toimintoja AUT:n objektille, jonka määritelmää ei ole tallennettu ObjektivarastoTämän mekanismin avulla voit ohittaa tunnistuksen Object Repositorysta ja toimittaa Object-tiedoston. Descriptioni itse lausunnossa.
Objektin nimeä käytetään yksinkertaisesti yhdistämään skriptissä oleva objekti sen kuvaukseen objektitietokannassa. Tämä tarkoittaa, että jos muutat objektin nimeä sekä skriptissäsi että objektitietokannassa, skriptin pitäisi silti toimia. Katso seuraava video tästä konseptista.
Napauta täältä jos video ei ole saatavilla
Video Highlights
- Poista objekti DescriptObjektitietovaraston Agentin nimi WinEdit-ruudusta. Jos suoritat testin uudelleen, se epäonnistuu, koska se ei tunnista objektia. Tarkastellaanpa syytä, miksi komentosarja epäonnistuu.
- Suoritusajan aikana UFT Yksi tunnistaa WinEdit-ruudussa suoritettavan toiminnon ja objektin DescriptObjektitietovarastossa oleva ion tallennetaan agentin nimenä. Se käyttää tätä nimeä track objekti objektivarastossa. Yläobjektilla ei voi olla kahta samannimistä aliobjektia, joten QTP kartoittaa objektin yksilöllisesti tietovarastossa. Sitten se käyttää tallennettua kuvausta Object Repositoryssa, korvaa nimen kuvauksella ja käyttää tuloksena olevaa lauseketta objektin tunnistamiseen testattavassa sovelluksessa.
- Koska meidän tapauksessamme olimme poistaneet tämän objektikuvauksen kokonaan, skripti epäonnistuu
- Mutta entä jos sen sijaan, että QTP korvaatko objektikuvauksen, määritätkö testaajana suoraan objektikuvaukset skriptissäsi? Tämä ei ole muuta kuin "Descriptive ohjelmointi"
Tuo yksi vastuunmuutos toteutetaan kahdella alla olevalla lomakkeella, ja kukin lomake sopii erityyppiseen skriptiin.
Tyyppisiä Descriptive ohjelmointi
Voit käyttää Descriptohjelmointi kahdella tavalla
- Staattinen
- Dynaaminen
Staattinen Descriptive ohjelmointi
Staattisessa menetelmässä objektin tunnistamista varten määrität objektin ominaisuuden seuraavassa muodossa
property:=values,
Tätä muotoa kutsutaan ominaisuus-arvopariksi, ja se kirjoitetaan lainausmerkkeihin. Täydellisesti kirjoitettuna staattinen lauseke näyttää tältä:
TestObject("PropertyName1:=PropertyValue1", "PropertyName2:=PropertyValue2").Method
Jos objektisi käyttää useita kuvauksia tunnistamiseen, voit määrittää ne pilkuilla
Joten meidän tapauksessamme Agentin nimen kuvaus tulee
"nativeclass:=Edit", "attached text:=Agent Name:"
Staattiset kuvaukset luetaan lausekkeen suorituskohdassa, minkä vuoksi ne sopivat erinomaisesti kertaluonteisiin vaiheisiin ja skriptien nopeisiin korjauksiin, joita ei haluta tallentaa uudelleen.
Dynaaminen Descriptive ohjelmointi
Toinen tapa tehdä sama toiminto on käyttää Dynamic Descriptive ohjelmointi
Jos komentosarjasi käyttää kuvaavaa ohjelmointiobjektiehdokasta useita kertoja, on erittäin väsyttävää määrittää kaikki ominaisuusarvoparit jokaiselle lauseelle
Tällaisissa tapauksissa voit käyttää Descriptioniluokka, jonka tarjoaa QTP
Kuvausobjektin luomisen syntaksi on
Set MyDescription = Description.Create() MyDescription("property").Value = "property-value"
Tämä on dynaaminen menetelmä
Täyttämällä objektin yllä käytetyillä Agent Name -ominaisuuksilla saadaan täydellinen, uudelleenkäytettävä kuvaus:
Dim oDesc Set oDesc = Description.Create() oDesc("nativeclass").Value = "Edit" oDesc("attached text").Value = "Agent Name:"
Muuttuja oKuvaus voidaan nyt välittää mihin tahansa lauseeseen, joka tarvitsee kyseistä objektia, joten yksi muokkaus päivittää jokaisen vaiheen, joka sitä käyttää.
Staattinen vs. dynaaminen Descriptive-ohjelmointi: Milloin kutakin käytetään
Molemmat lomakkeet tuottavat saman ajonaikaisen kuvauksen, joten valinta koskee pikemminkin ylläpitoa kuin kykyä.
| Kriteeri | Staattinen (rivissä) | Dynaaminen (Descriptioni-objekti) |
|---|---|---|
| Näin kuvaus on kirjoitettu | Testikohteen kutsun sisällä kirjoitetut ominaisuusarvoparit | Ominaisuudet, jotka on lisätty luotuun objektiin Description.Create() |
| Käyttää uudelleen | Toistuu jokaisessa lausekkeessa, joka tarvitsee objektin | Tallennetaan yhteen muuttujaan ja välitetään tarvittaessa |
| luettavuus | Lyhyet lauseet pysyvät luettavina; pitkät vaikeuttavat lukemista | Ylimääräisiä aloitusrivejä, mutta itse lauseke pysyy lyhyenä |
| Suoritusaikaiset muutokset | Arvot ovat kiinteitä, elleivät ne ole yhdistetty muuttujista | Ominaisuusarvot voidaan määrittää uudelleen ennen jokaista käyttökertaa |
| Toimii ChildObjects-objektien kanssa | Ei, suodatinargumentin on oltava Descriptioniobjekti | Kyllä, tämä on pakollinen lomake |
| Soveltuu parhaiten | Yksi tai kaksi vaihetta objektissa, jota ei ole repositoriossa | Toistuvasti käytetyt objektit tai suorituksen aikana haetut kokoelmat |
Miksi käyttää Descriptive ohjelmointi?
Alla oleva transkriptio liittyy videon läpikäyntiin todellisesta tilanteesta, jossa esineiden lukumäärää ei voida tietää etukäteen.
Video-transkripti
- Miljoonan dollarin kysymys on, miksi käyttää DP:tä, kun objektin tunnistusprosessia hoitaa QTP
- Oletetaan, että sinulle on annettu tehtäväksi testata työpaikkaportaalia. Syötät hakukyselyn portaaliin, ja testi odottaa sinun valitsevan kaikki saatavilla olevat työpaikat ja napsauttavan Hae työpaikkaa.
- Mutta heijastettavien töiden määrä riippuu hakukyselystä ja komentosarjan suoritushetkellä saatavilla olevista töistä, eikä heijastettavien töiden määrää voida ennustaa etukäteen.
- Tällaisissa tapauksissa voit käyttää kuvailevaa ohjelmointia. Vaikka et tiedä valintaruutujen lukumäärää ja nimiä, tiedät objektien luokan nimellä ”WebCheck”.Box"
- Voit käyttää ChildObjects-metodi palauttaa tietylle vanhemmalle kuuluvia objekteja
- Koodirivi, kuten -
Set allObjects = Browser("Jobs").Page("QTP").ChildObjects()
palauttaa kaikki tämän sivun aliobjektit.
- Mutta haluamme vain WebCheckinBox objektit. Tätä varten voimme luoda suodatinobjektin ja asettaa sen ominaisuuden web-valintaruutuluokkaan ja sitten välittää tämän suodattimen argumenttina ChildObjects-metodille.
- Tässä tapauksessa vain valintaruudut palautetaan.
- Seuraavaksi voit kirjoittaa tällaisen koodin, joka käyttää koko valintaruutujen kokoelmaa nollasta alkaen ja asettaa kaikki valintaruudut päälle.
- Seuraavaksi voit suorittaa testin napsauttamalla Käytä-painiketta
- Voit myös käyttää Descriptive Ohjelmointi suorittamaan kohteita, joita on vaikea tallentaa, kuten automaattinen piilotuspaneelit, objektit muuttuvilla hierarkioilla, sisäkkäiset sisäiset objektit, alivalikot.
- Voit myös tehdä edistyneitä merkkijonokäsittelyjä käyttämällä kuvaavaa ohjelmointia
- Yhdessä index-ominaisuuden kanssa kuvaileva ohjelmointi voi olla erittäin hyödyllistä vaikeiden objektien tunnistamisessa.
- Jos käytät ohjelmallista kuvausta objektihierarkiassa olevalle objektille, sinun on käytettävä kuvailevaa ohjelmointia sitä seuraaville aliobjekteille.
- Jos esimerkiksi Page-objektille on käytetty kuvailevaa ohjelmointia, mutta sitä seuraava WinEdit-aliobjekti on peräisin Object Repositorysta, lauseke on virheellinen.
- Päinvastoin, kun kuvailevaa ohjelmointia käytetään sekä Page- että WinEdit-objekteille, lause on oikein.
Kirjoitettuna transkriptiossa kuvattu suodatin ja silmukka näyttävät tältä:
Dim oFilter, allCheckBoxes, i Set oFilter = Description.Create() oFilter("micclass").Value = "WebCheckBox" Set allCheckBoxes = Browser("Jobs").Page("QTP").ChildObjects(oFilter) For i = 0 To allCheckBoxes.Count - 1 allCheckBoxes(i).Set "ON" Next
Kokoelma perustuu nollaan, minkä vuoksi silmukka pysähtyy kohtaan Määrä – 1Koska suodatinta arvioidaan rivin suorituksen yhteydessä, sama koodi toimii riippumatta siitä, palauttaako haku kolme vai kolmekymmentä työtä.
Säännölliset lausekkeet, järjestyslukutunnisteet ja yleiset sudenkuopat
DescriptIve-ohjelmointi käyttäytyy kahdella tavalla, jotka yllättävät useimmat ihmiset ensimmäisellä kerralla, kun lauseke epäonnistuu ilman näkyvää syytä.
1) Jokaista ominaisuuden arvoa käsitellään säännöllisenä lausekkeena. Kuvateksti, kuten Yhteensä (USD) ei siis löydä vastinetta, koska sulkeet ovat säännöllisten lausekkeiden syntaksia. Poista ne kenoviivalla tai poista säännöllisten lausekkeiden arviointi käytöstä kyseiselle ominaisuudelle Descriptioni-objekti:
Set oDesc = Description.Create() oDesc("name").Value = "Total (USD)" oDesc("name").RegularExpression = False
2) Järjestysluvut ratkaisevat tasatilanteet. Kun kuvaus vastaa edelleen useampaa kuin yhtä kohdetta, lisää indeksi, sijainti or luomisaika ylimääräisenä ominaisuutena. Indeksilaskenta alkaa nollasta:
WebEdit("name:=userName", "html tag:=INPUT", "index:=0").Set "guru99" WebEdit("name:=userName", "html tag:=INPUT", "index:=1").Set "guru99"
Kolme muuta sudenkuoppaa kannattaa tarkistaa ennen sovelluksen virheenkorjauksen aloittamista:
- Käyttää mikroluokka, ei etikettiä Luokan nimi näkyy Object Spyssa. Näyttönimi ei ole kelvollinen ominaisuus kuvauksessa.
- Ominaisuuksien nimissä ei ole kirjainkokoeroa, mutta ne on kirjoitettava täsmälleen samalla tavalla kuin teknologia ne raportoi, mukaan lukien välilyönti liitteenä oleva teksti ja html-tagi.
- DescriptIve-ohjelmointi ohittaa repositorion; se ei paranna objektin tunnistusta. Jos oikeaa lisäosaa ei ole ladattu, mikään kuvaus ei tee objektista tunnistettavaa.
