Nie chodziło mi o to, i chyba trochę źle mnie zrozumieliście.
Przykładowo robię klasę SeDriver - klasa jest odpowiedzialna za zarządzanie Driverem Selenium. W głównej klasie znajduje się instancja przeglądarki funkcja Run oraz Close returnRunBrowser - zwracajaca nazwe wybranego driver FF,Chrome,Opera.
I teraz tworze pod klasy, jedna należy do zarządzania WindowsHederami i nawigacją pomiędzy zakładkami okna
Następna zwracajaca elementy czy listy elementów za pomocą róznych metod czy nawet tworzenia złożonych Xpach oraz zawierająca metodę setAtrribute zapomocą skryptu JavaScrip.
Chodzi o to, że mam ponad 100 funkcji niezbędnie mi potrzebnych podczas pisania już działającego programu z których muszę korzystać. Np zwrócenie wszystkich windocznych fraz od użytkownika. czy propbranie Dec który selenium w prosty sposób nie ułatwia
/// <summary>
/// Zwraca Decs obecnie aktywnego okna
/// </summary>
/// <returns></returns>
public string DecsGet()
{
return GetElementByName("description").GetAttribute("content");
}
GetElementByName - funkcja stworzona przeze mnie.
/// <summary>
/// Zwraca wyszukany element po name
/// </summary>
/// <param name="serchValue"></param>
/// <returns></returns>
public IWebElement GetElementByName(string serchValue)
{
return Driver.FindElement(By.Name(serchValue));
}
/// <summary>
/// Funkcja zwracająca widoczne frazy dla uzytkownika w aktywnym oknie
/// </summary>
/// <returns>return string</returns>
public string BodyFrazGet()
{
return GetElementByTagName("body").Text; // Zwracamy fraze strony
}
I chodzi mi teraz o to. Że mam klasę SeDriver i chciał bym to jakoś fajnie porozbijać odwoływania się do metod. Żeby szybko móc odwoływać się do funkcji i nie mieć tego że jak wybiorę klase to nagle wyświetli mi się ponad 200 funkcji i szukaj i pamiętaj.
Więc robię tak że mam sobie klasę główną - z jakimś tam przeznaczeniem głownym i w niej podpinam pod klasy które mają inne działanie np
SeDriver.Instance.Run("chrome") // opala chroma
SeDriver.Instance.Element.GetElementByClassName("value") //
I klasa Element jest podpięta pod główna klasę operacji do Selenium lecz jej zadaniem jest zwracanie elementów.
SeDriver.Instance.WebHeaders.GetWindowHandles()
Dzięki takiemu rozwiązaniu. Mam klase z główna odpowiedzialnością i porozbijaną na mniejsze. Dzięki czemu już potem szybciej pisze mi się kod. Oraz szybciej odnajduje mi się moje funkcje
/// <summary>
/// Funkcja sprawdzajaca wszystkie owarte okna taby
/// </summary>
/// <returns>zwara liste z nazwami okien</returns>
public List<String> GetWindowHandles()
{
string nowWindow = GetCurrentWindowsHandles(); // Przypisanie obecnego okna
List<String> ListWindowHandles = new List<String>(); // Tworzenie listy
foreach (String window in Driver.WindowHandles)
{
Driver.SwitchTo().Window(window);
ListWindowHandles.Add(window);
}
SwitchToWindow(nowWindow);
return ListWindowHandles;
}
I bardzo nie lubię robić całkowicie osobnych klas np Element i WebHeders powiedzmy w osobnych. I pamiętać jaka klasa jest do czego. Tak sobie podczepiam mniejsze pod główną i z rozbudową nie ma problemu.
A niestety mam dużo klas zarządzających z racji tego iż mamy dużo procesów które trzeba obsłużyć. A dodatkowo czyności wykonywane na jakimś procesie mają dużo elementów.
Np dostaje takie coś w liście bo tak jest przystosowane api. I muszę obsłużyć tego stringa
key04#GetValue#tagName$inst%21#act$inplement
key04 - klucz priorytetu
GetValue - co mam zrobic
Tagname - po czym mam szukac
inst%21 - wartości jakiej
act - rodzaj akcji które mamy rozbite też na parę gróp
inplement - dokładne odwołanie do akcji.
I naprawdę wygląda to różnie czasem brakuje czegoś i też trzeba to obsłużyć jako wartość domyślna.
I teraz jak mam sobie myśleć szukanie tego wszystkiego po 100 małych klasach i rozbudowę to dziękuje bardzo.
Dla tego stąd moje pytanie czy moje podejście zrobienie głwonej klasy przeznaczonej strikte dla jednej czynności. Obsługą danej funkcjonalności. I podpinaniem do tego pod klas które wykonują dodatkowe czyności i podklasa jest przeznaczona do jednej czyności Np sprawdzenie jakie kroki z tego kodu mają być wykonane, albo zwracające z tego kodu informacje.
Jest dobrym rozwiązaniem, a jak nie to czy macie lepsze coś.