{"id":911,"date":"2015-12-18T09:00:54","date_gmt":"2015-12-18T08:00:54","guid":{"rendered":"https:\/\/sii.pl\/blog\/?p=911"},"modified":"2023-07-21T10:48:42","modified_gmt":"2023-07-21T08:48:42","slug":"how-to-czyli-framework-white-dla-aplikacji-desktopowych-czesc-2","status":"publish","type":"post","link":"https:\/\/sii.pl\/blog\/how-to-czyli-framework-white-dla-aplikacji-desktopowych-czesc-2\/","title":{"rendered":"How to: Czyli framework White dla aplikacji desktopowych &#8211; cz\u0119\u015b\u0107 2"},"content":{"rendered":"\n<p>Kolejn\u0105 metod\u0105 b\u0119dzie funkcja zamykaj\u0105ca okno testowanej aplikacji. Jest ona znacznie kr\u00f3tsza \u2013 jest to wersja podstawowa. Przed nazw\u0105 metody dodajemy adnotacj\u0119 <em>[TestClea<\/em><em>nup].<\/em> <\/p>\n\n\n\n<p>Wyszukujemy nazw\u0119 aplikacji na li\u015bcie otwartych i aktywnych instancji i wywo\u0142ujemy na niej funkcj\u0119 <em>Close().<\/em> Oczywi\u015bcie jest to wersja do\u015b\u0107 uboga \u2013 mo\u017ce przecie\u017c okaza\u0107 si\u0119, \u017ce okno jest ju\u017c zamkni\u0119te (aplikacja scrashowa\u0142a si\u0119 podczas testu i okno zosta\u0142o zamkni\u0119te), wi\u0119c nale\u017ca\u0142oby sprawdzi\u0107, czy okno nie jest nullem. Ale na potrzeby niniejszego artyku\u0142u wystarczy nam opcja podstawowa.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2015\/11\/art3-4.png\"><img decoding=\"async\" width=\"695\" height=\"96\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2015\/11\/art3-4.png\" alt=\"TestBase \u2013 funkcja czyszcz\u0105ca\" class=\"wp-image-912\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2015\/11\/art3-4.png 695w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2015\/11\/art3-4-300x41.png 300w\" sizes=\"(max-width: 695px) 100vw, 695px\" \/><\/a><figcaption class=\"wp-element-caption\">Rys.3. TestBase \u2013 funkcja czyszcz\u0105ca<\/figcaption><\/figure>\n\n\n\n<p>Nast\u0119pnym etapem jest stworzenie klasy zawieraj\u0105cej metody dla naszego testu. Mo\u017cna nazwa\u0107 j\u0105 dowolnie, nazwa ma by\u0107 intuicyjna. Nasz test b\u0119dzie najprostszym z mo\u017cliwych \u00ad\u2013 b\u0119dzie to dodanie dw\u00f3ch liczb pojedynczych i sprawdzenie czy suma b\u0119dzie taka, jaka by\u0107 powinna. W tym celu tworzymy dwuparametrow\u0105 metod\u0119 typu void. Tworzymy instancj\u0119 okna na podstawie tytu\u0142u aplikacji (linia 83). Poni\u017cej tworzymy obiekty typu UIItem wyszukuj\u0105c w oknie kontrolki na podstawie tekstu (linia 84 i 85) oraz na podstawie automationID (linia 86 i 87). Aby pobra\u0107 automationID wykorzystujemy program Inspect.exe, o kt\u00f3rym wspomniano we wcze\u015bniejszych wpisach. Po klikni\u0119ciu w znak r\u00f3wno\u015bci wywo\u0142ano funkcj\u0119 <em>WaitWhileBusy()<\/em> \u2013 funkcja ta czeka, dop\u00f3ki okno jest zaj\u0119te. Jest to istotny element synchronizacji i przydaje si\u0119 w bardziej czasoch\u0142onnych komendach. Na koniec u\u017cyto asercji <em>AreEqual()<\/em>, aby sprawdzi\u0107 poprawno\u015b\u0107 dodawania. Ciekawostka: je\u015bli zamiast resultInt.ToString() u\u017cyjemy tylko resultInt rezultat testu b\u0119dzie fail \u2013 15 i \u201e15\u201d to tutaj ca\u0142kiem odmienne warto\u015bci. Metoda prezentuje si\u0119 nast\u0119puj\u0105co:<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter wp-image-6554\"><img decoding=\"async\" width=\"979\" height=\"434\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2015\/12\/art3-5.png\" alt=\"Metoda dodaj\u0105ca\" class=\"wp-image-6554\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2015\/12\/art3-5.png 979w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2015\/12\/art3-5-300x133.png 300w\" sizes=\"(max-width: 979px) 100vw, 979px\" \/><figcaption class=\"wp-element-caption\">Rys. 4. Metoda dodaj\u0105ca<\/figcaption><\/figure>\n\n\n\n<p>Ostatnim etapem b\u0119dzie napisanie testu. Przechodzimy do pliku, kt\u00f3ry jest domy\u015blnie tworzony wraz z projektem. Dodajemy dziedziczenie klasy TestBase (linia 7). Tworzymy obiekt naszej klasy z metod\u0105 dodaj\u0105c\u0105 (linia 9). W metodzie wywo\u0142ujemy funkcj\u0119, podaj\u0105c w parametrach liczby do dodania (linia 14).<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2015\/11\/art3-6.png\"><img decoding=\"async\" width=\"418\" height=\"178\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2015\/11\/art3-6.png\" alt=\"Test kalkulatora\" class=\"wp-image-914\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2015\/11\/art3-6.png 418w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2015\/11\/art3-6-300x128.png 300w\" sizes=\"(max-width: 418px) 100vw, 418px\" \/><\/a><figcaption class=\"wp-element-caption\">Rys. 5. Test kalkulatora<\/figcaption><\/figure>\n\n\n\n<p>Jest to najprostszy przyk\u0142ad wykorzystania frameworka TestStack.White. Poni\u017cej podane zostan\u0105 przyk\u0142ady interakcji z mniej oczywistymi kontrolkami, np.:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Combobox<\/li>\n<\/ul>\n\n\n\n<p>dateOption \u2013 to podana w parametrze funkcji warto\u015b\u0107 do wybrania z combobox (string)<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2015\/11\/art3-7.png\"><img decoding=\"async\" width=\"811\" height=\"265\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2015\/11\/art3-7.png\" alt=\"Combobox\" class=\"wp-image-915\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2015\/11\/art3-7.png 811w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2015\/11\/art3-7-300x98.png 300w\" sizes=\"(max-width: 811px) 100vw, 811px\" \/><\/a><figcaption class=\"wp-element-caption\">Rys. 6. Combobox<\/figcaption><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Menu\n<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image aligncenter\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2015\/11\/art3-8.png\"><img decoding=\"async\" width=\"708\" height=\"71\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2015\/11\/art3-8.png\" alt=\"Menu\" class=\"wp-image-916\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2015\/11\/art3-8.png 708w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2015\/11\/art3-8-300x30.png 300w\" sizes=\"(max-width: 708px) 100vw, 708px\" \/><\/a><figcaption class=\"wp-element-caption\">Rys. 7. Menu<\/figcaption><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p>Chcesz lepiej zrozumie\u0107 aplikacje i systemy, kt\u00f3re testujesz? Do\u0142\u0105cz do ModernTester, poznaj najpotrzebniejsze narz\u0119dzia, frameworki oraz j\u0119zyki programowania i \u0107wicz na specjalnie przygotowanych \u015brodowiskach testowych: <a href=\"https:\/\/moderntester.sii.pl\/\" rel=\"nofollow\" >Platforma e-learningowa ModernTester<\/a><\/p>\n\n\n<div class=\"kk-star-ratings kksr-auto kksr-align-left kksr-valign-bottom\"\n    data-payload='{&quot;align&quot;:&quot;left&quot;,&quot;id&quot;:&quot;911&quot;,&quot;slug&quot;:&quot;default&quot;,&quot;valign&quot;:&quot;bottom&quot;,&quot;ignore&quot;:&quot;&quot;,&quot;reference&quot;:&quot;auto&quot;,&quot;class&quot;:&quot;&quot;,&quot;count&quot;:&quot;0&quot;,&quot;legendonly&quot;:&quot;&quot;,&quot;readonly&quot;:&quot;&quot;,&quot;score&quot;:&quot;0&quot;,&quot;starsonly&quot;:&quot;&quot;,&quot;best&quot;:&quot;5&quot;,&quot;gap&quot;:&quot;11&quot;,&quot;greet&quot;:&quot;&quot;,&quot;legend&quot;:&quot;0\\\/5 ( votes: 0)&quot;,&quot;size&quot;:&quot;18&quot;,&quot;title&quot;:&quot;How to: Czyli framework White dla aplikacji desktopowych - cz\u0119\u015b\u0107 2&quot;,&quot;width&quot;:&quot;0&quot;,&quot;_legend&quot;:&quot;{score}\\\/{best} ( {votes}: {count})&quot;,&quot;font_factor&quot;:&quot;1.25&quot;}'>\n            \n<div class=\"kksr-stars\">\n    \n<div class=\"kksr-stars-inactive\">\n            <div class=\"kksr-star\" data-star=\"1\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"2\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"3\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"4\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"5\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n    <\/div>\n    \n<div class=\"kksr-stars-active\" style=\"width: 0px;\">\n            <div class=\"kksr-star\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n    <\/div>\n<\/div>\n                \n\n<div class=\"kksr-legend\" style=\"font-size: 14.4px;\">\n            <span class=\"kksr-muted\"><\/span>\n    <\/div>\n    <\/div>\n","protected":false},"excerpt":{"rendered":"<p>Kolejn\u0105 metod\u0105 b\u0119dzie funkcja zamykaj\u0105ca okno testowanej aplikacji. Jest ona znacznie kr\u00f3tsza \u2013 jest to wersja podstawowa. Przed nazw\u0105 metody &hellip; <a class=\"continued-btn\" href=\"https:\/\/sii.pl\/blog\/how-to-czyli-framework-white-dla-aplikacji-desktopowych-czesc-2\/\">Continued<\/a><\/p>\n","protected":false},"author":37,"featured_media":993,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_editorskit_title_hidden":false,"_editorskit_reading_time":0,"_editorskit_is_block_options_detached":false,"_editorskit_block_options_position":"{}","inline_featured_image":false,"footnotes":""},"categories":[1317],"tags":[139,136,135,68],"class_list":["post-911","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-testowanie","tag-app","tag-castle-core","tag-teststack-white","tag-visual-studio-express"],"acf":[],"aioseo_notices":[],"republish_history":[],"featured_media_url":"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2015\/11\/ZDJ\u0118CIE_KOD.jpg","category_names":["Testowanie"],"_links":{"self":[{"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts\/911"}],"collection":[{"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/users\/37"}],"replies":[{"embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/comments?post=911"}],"version-history":[{"count":2,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts\/911\/revisions"}],"predecessor-version":[{"id":23006,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts\/911\/revisions\/23006"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/media\/993"}],"wp:attachment":[{"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/media?parent=911"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/categories?post=911"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/tags?post=911"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}