Wie initialisiere ich SelectElements bei Verwendung von PageFactory / FindsBy in Selenium C #?
Ich erstelle ein Seitenobjektmodell in Selenium WebDriver für C # mit der PageFactory.
Leider habe ich festgestellt, dass dieFindsByAttribute
initialisiert keinSelectElement
(HTML<select>
tag / Dropdown-Menü). Ich habe ein paar Ideen gefunden, um das Problem zu umgehen, aber keine davon ist ideal:
PageFactory
undFindsByAttribute
sindsealed
, also kann ich es nicht erzwingen, indem ich nur diese erbe.Manuelles Instanziieren einesSelectElement
von einemIWebElement
in jeder Methode ist ziemlich chaotisch und doppelt. Es ignoriert auch das scheinbare eingebaute Warten inPageFactory
und wirftNoSuchElementException
s, es sei denn, ich füge jedes Mal eine Wartezeit hinzu, die es erforderlich macht, den Locator überall zu wiederholen, wodurch der Zweck des POM (teilweise) außer Kraft gesetzt wird.Wrapping jedesIWebElement
Eigenschaft mit einemSelectElement
Eigenschaft ist weniger chaotisch, hat aber immer noch das gleiche Warteproblem wie oben. Die beste Option ist bis jetzt # 3 und das Schreiben eines Wrappers fürSelectElement
das fügt jeder Methode ein Warten hinzu. Während diese Lösung wirdArbei, es wird den Code jeder Seite viel aufladen, da anstelle dieses (hypothetischen) hübschen Codes:
[FindsBy(How = How.Id, Using = "MonthDropdown")]
public SelectElement MonthDropdown;
Ich stecke mit einem Wrapper-Wrapper fest (etwas, das ich lieber vermeiden möchte), und:
[FindsBy(How = How.Id, Using = "MonthDropdown")]
private IWebElement _monthDropdown;
public Selector MonthDropdown
{
get { return new Selector(MonthDropdown, Wait); }
}
MitSelector
Sein dasSelectElement
wrapper, das muss auch das @ aufnehmIWait<IWebDriver>
so kann es warten und ein neues @ instanziierSelector
Jedes Mal, wenn ich darauf zugreife.
Gibt es einen besseren Weg, dies zu tun?
BEARBEITEN Falsche Zugriffsmodifikatoren müde eingegeben. Fest. Vielen Dank, @ JimEvans.