Czy w modelu obiektów strony wszystkie klasy muszą współużytkować jedną instancję sterownika?
Mogę utworzyć plik BaseTest.java i zadeklarować publiczny statyczny sterownik WebDriver; w tym. Następnie wszystkie klasy mogą rozszerzać i używać tego samego odwołania do sterownika.
Wtedy wszystkie moje klasy testowe mogą używać tej samej instancji.
Mogę uzyć:
driver = new ChromeDriver();
w każdej metodzie testowej lub scenariuszu Cucumber. Jestem zdezorientowany, jak używać sterownika. Czy sterownik jest sesją okna Chrome?
Odpowiedzi
Czy sterownik jest sesją okna Chrome?
Nie. Sterownik ChromeDriver reprezentuje serwer, który kontroluje przeglądarkę Chrome działającą lokalnie. Serwer będzie kontrolował cykl życia przeglądarki, taki jak inicjowanie, zabijanie i kontrolowanie działań.
Więcej informacji można znaleźć w dokumentacji
Czy mogę utworzyć sterownik = nowy ChromeDriver (); w każdej metodzie testowej lub scenariuszu Cucumber
Tak, ale będzie to zależeć od twojego kontekstu. Jeśli chcesz, aby wiele przeglądarek działało niezależnie w niektórych działaniach, możesz utworzyć nowy sterownik.
Premia:
Mogę utworzyć plik BaseTest.java i zadeklarować publiczny statyczny sterownik WebDriver; w tym. Następnie wszystkie klasy mogą rozszerzać i używać tego samego odwołania do sterownika.
To może być niebezpieczne. Nieherantancja jest najsilniejszą formą sprzężenia, jaką możesz stworzyć, a posiadanie zmiennej globalnej może spowodować zmianę w zachowaniu bardzo trudną do zrozumienia. Możesz chcieć zrefaktoryzować swój kod, tak aby instancje sterownika zostały wprowadzone do obiektów strony . W ten sposób nie łączysz obiektów strony ze zmienną globalną i możesz łatwo tworzyć dla nich testy jednostkowe, wstrzykując podwójny test dla sterownika.
Co to jest chromedriver:
chromedriver ma kod, który może współdziałać z przeglądarką. Te polecenia są ujawniane za pośrednictwem interfejsu API (widzisz to, gdy chromedriver został uruchomiony na hoście lokalnym: 14563). Z kodu uzyskujemy dostęp do punktów końcowych tego interfejsu API, aby nakazać sterownikowi Chrome, aby coś zrobił.
Na przykład, kiedy powiesz elem.click (), selen komunikuje się z API i każe chromedriverowi kliknąć określony element w przeglądarce. Sterownik Chrome robi to i zwraca odpowiedź z przeglądarki i zwraca ją do kodu wyjściowego

Dlaczego potrzebujemy klasy bazowej
Ma to na celu zapewnienie, że sesje sterowników są przekazywane między różnymi klasami. W przeciwnym razie nie będziesz w stanie zrobić czegoś takiego
page1.sendpassword()
page1.sendusername()
page1.submit()
page2.adduser()
Ponieważ jeśli masz inną sesję sterownika dla page1 i page2,
wtedy po uruchomieniu page2.adduser () sterownik chrome zostanie uruchomiony na nowo, a poprzednie sesje logowania nie będą dostępne, więc musisz zalogować się ponownie
Nie można również dodawać zrzutów ekranu ani działań specyficznych dla sterownika w klasach odbiorników do raportowania
Możesz przeczytać więcej o klasie bazowej pod adresem:
Jaki jest cel tworzenia klasy BaseTest, która deklaruje globalny statyczny obiekt WebDriver w ramach POM?
Wystąpienie WebDriver w kodzie to rodzaj kanału, którego używasz do interakcji z pojedynczą sesją implementacji sterownika sieciowego. Zasadniczo to, czego używasz w swoim kodzie, to tak zwane powiązanie klienta .
WebDriver to serwer HTTP, który udostępnia API REST w kierunku powiązań klienta (np. Bibliotek Java) z jednej strony i może kontrolować przeglądarkę z drugiej strony.
Zatem cały Twój kod, który zakłada, że działa z tą samą sesją Chrome (zachowując pliki cookie itp.), Musi współdzielić tę samą instancję sterownika sieciowego.
Nic nie stoi na przeszkodzie, aby w Twoim kodzie utworzyć instancję jeszcze jednego nurka. Dzięki tej nowej instancji uzyskasz kontrolę nad inną równolegle izolowaną sesją przeglądarki.