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 wirftNoSuchElementExceptions, 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.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage