Kuidas oma elemente üheselt nimetada ja töölauarakenduse teste automatiseerida?

Foto autor Ricardo Gomez Angel saidil Unsplash

Motivatsioon

Töölauarakenduste jaoks automatiseeritud testide kirjutamine ei ole lihtne ülesanne. Eriti kui see kasutab Windowsi esitlusfondi (WPF). See võimaldab nii palju pesastatud juhtimise võimalusi ning keerulisi ruute ja menüüsid.

Siin Clemexis kasutame tööriista töölauatestide automatiseerimiseks, mis tuginevad WPF FrameworkElement.Name atribuudile rakendusega suhtlemiseks. Kuna peame looma kogumisandmete põhjal dünaamilised juhtelemendid, võivad need mitme kasutajaliidese elemendi jaoks olla sama nimega.

Näiteks genereerib järgmine kood paneelide kogu põhjal menüü.

Elementide puud kontrollides näeme, et meil on nüüd mitu samanimelist elementi: „MenuBtn”.

Sellise olukorra vältimiseks ja iga nupu kordumatute nimede saamiseks töötasime välja neli erinevat lähenemisviisi.

  • Kasutades koodi taga
  • Andmete sidumise kasutamine
  • Lisatud omaduste kasutamine
  • Kogumisindeksite kasutamine

Kasutades koodi taga

Eeldades, et meil on juurdepääs mõnele ainulaadsele ID-le elementide andmete kontekstis. Lihtsaim viis on kasutada FrameworkElemendi laaditud sündmust unikaalse nime seadmiseks, kasutades kooditaga mudelit.

Nüüd, kui kontrollime elemendipuu, näeme, et meil on iga nupu jaoks kordumatud nimed.

Andmete sidumise kasutamine

Andmesideme kasutamine muudab meie koodi palju puhtamaks, hõlpsamini loetavaks ja arusaadavaks. Kui proovime sarnast lähenemisviisi, kasutades andmete sidumist, võime saada järgmise lähtekoodi:

Kahjuks, kui proovime seda koodi üles ehitada, kuvatakse sõnumiga kompileerimisviga:

Märkelaiendid pole Uidi või Nimi atribuutide väärtuste korral lubatud, nii et {Binding Panel.PanelType, StringFormat = 'MenuBtn {0}'} 'ei kehti.

See piirang takistab meil otseselt nime Nimi sidumist.

Lisatud omaduste kasutamine

Eelmise katse piirangutest üle saamiseks võime määratleda uue atribuudi, mis annaks meile nime. Uute atribuutide lisamiseks olemasolevatele juhtelementidele saame kasutada manustatud atribuute.

OnValueChanged sündmus käivitab iga kord, kui meie vara väärtus muutub. Kui see juhtub, saame uue väärtuse ja määrame selle nimeks FrameworkElement. Me anname oma lisatud varale nime Nimi. See võib olla midagi, mida me soovime, näiteks CustomName või TestName.

Uue atribuudi kasutamiseks peame lisama XAML-ile nimeruumi ja kinnitama atribuudi meie nupule.

Meie kood kompileeritakse nüüd ilma probleemideta ja meil on iga elemendi jaoks kordumatud nimed.

Kogumisindeksite kasutamine

Eelmises näites lõime ainulaadsed nimed, lisades vara Id. On ka teisi stsenaariume, kus meil pole üksuse kordumatu elemendi nime loomiseks üksusel ID-d. Selleks võime selle asemel kasutada kogumisindeksit.

Proovime siduda meie nupukogumiku stringide loendiga.

Selle saavutamiseks saame konverteriga kasutada sama AttachedProperty. See otsib kollektsiooni elemendi indeksit.

XAML-is hakkame nüüd kasutama MultiBindingi, kuna vajame nii elementi kui ka kogu.

Elementide puud vaadates näeme, et meie nupud kannavad nime MenüüBtn00, MenüüBtn01 jne.

Kokkuvõte

Dünaamiliselt loodud WPF-i juhtelementide jaoks ainulaadsete nimede genereerimine toimub elegantsel viisil, kasutades funktsiooni Manustatud atribuudid ja kasutades mitmiksidet kohandatud muunduriga.