Selenium -Treiber für WinForms -Anwendungen
Alle Beiträge sind begrüßt :)
Dieses Projekt verwendet
Warum ein weiterer Treiber, wenn es bereits https://github.com/microsoft/winappdriver gibt? Die App, die ich teste, ist mit vielen Elementen ziemlich groß, und dieser Treiber hat nach 60 Sekunden auf einigen XPath -Abfragen (siehe dieses Problem) nach dem Timing und nach dem Zusammenbau alles wurde die Abfrage unter 2 Sekunden abgeschlossen.
Dieses Projekt basiert auf der MS UI -Automatisierung, die Teil der Windows -API der Barrierefreiheit ist.
In der offiziellen Dokumentation wird die Unterstützung für verschiedene Plattformen erwähnt:
Die UI -Automatisierung wird in den folgenden Betriebssystemen unterstützt: Windows XP, Windows Server 2003, Windows Server 2003 R2, Windows Vista, Windows 7, Windows 10, Windows Server 2008, Windows Server 2008 R2, Windows Server 2012, Windows Server 2012 R2, Windows Server 2016 und Windows Server 2019.
Ich kann nicht bestätigen, dass es auf diesen Plattformen funktioniert, da ich nur 10 Unternehmen auf meinem Computer gewonnen habe, aber alle erforderlichen Bibliotheken sind Teil des Projekts.
Soweit ich weiß, ist der Entwicklermodus nicht erforderlich.
Derzeit gibt es keinen Installateur. Klonen Sie das Repository und erstellen Sie die ausführbare Datei aus den Quellen. Verwenden Sie die ausführbare Datei unter WinAppDriver.ServerbinDebugWinAppDriver.Server.exe
Die neueste Client -Treiberversion 3.141.0.0 muss beim Aufrufen des Servers verwendet werden.
Ok und Yes , zusätzliche Bildunterschriften können hinzugefügt werden, indem die Fähigkeit acceptAlertButtonCaptions mit einem von Semikolon getrennten Werteliste festgelegt wird Cancel und No , zusätzliche Bildunterschriften können hinzugefügt werden, indem dismissAlertButtonCaptions -Funktionen mit einer von der Semikolon getrennten Werteliste festgelegt werden Nicht unterstützte Selen -Befehle
XPATH -Unterstützung:
//node[3] //node[@attribute = 'X'] Nur dieser Appium -Befehl wird implementiert
Fügen Sie einen Verweis auf Selenium.WebDriver v3.141.0 (https://www.nuget.org/packages/selenium.webdriver/3.141.0) hinzu und Sie sind bereit zu gehen.
Der Treiber kann das System entweder zum Testerprozess starten oder an einen Laufprozess anhängen. Verwenden Sie Funktionen, um den zu befestigenden Prozess zu definieren.
Wenn kein Befehlszeilenargument bereitgestellt wird, wird der Server unter der Standard-IP-Adresse http://127.0.0.1:4444 gestartet.
Die folgenden Fähigkeiten werden unterstützt:
mode - start (Standardwert) oder attachprocessId - id des ProzessprocessName - Name des Prozesses angeschlossenexePath oder app - Pfad zur ausführbaren Datei, um den Prozess zu starten (Argumente können derzeit nicht vorgelegt werden)appWorkingDir - Legen Sie das Arbeitsverzeichnis des neuen Prozesses festmainWindowTitle - Regelmäßiger Ausdruck, um dem WinAppdriver zu helfensendKeyStrategy ( oneByOne | grouped | setValue ) - Strategie zum Eingeben von Text in ein Textfeld, Standardwert ist oneByOne . Derzeit kann diese Fähigkeit während der Sitzung nicht geändert werden public static RemoteWebDriver CreateSessionByStartingTheApplication()
{
DesiredCapabilities desktopCapabilities = new DesiredCapabilities();
desktopCapabilities.SetCapability("app", "<name of the program to start>");
// or "exePath" desktopCapabilities.SetCapability("exePath", "<path to the executable to start the process>");
// following capabilities should be provided for UWP applications like Calculator or Clocks & Alarms
// optional - to set the working directory
desktopCapabilities.SetCapability("appWorkingDir", "<path to run the process in>");
// optional - to identify the process
desktopCapabilities.SetCapability("processName", "<name of the process>");
// optional - to identify the main window
desktopCapabilities.SetCapability("mainWindowTitle", "<name of the process>");
return new RemoteWebDriver(
new CommandExec(new Uri("http://127.0.0.1:4444"),
TimeSpan.FromSeconds(60)),
desktopCapabilities);
}
public static RemoteWebDriver CreateSessionByAttachingToRunningProcess()
{
DesiredCapabilities desktopCapabilities = new DesiredCapabilities();
desktopCapabilities.SetCapability("mode", "attach");
// attach to process using process name
desktopCapabilities.SetCapability("processName", "<name of the process to attach to>");
// with (optional)
desktopCapabilities.SetCapability("windowTitle", "<regular expression to narrow down the list of matching processes>");
// or attach to process using process id
desktopCapabilities.SetCapability("processId", "<id of the process to attach to>");
return new RemoteWebDriver(
new CommandExec(new Uri("http://127.0.0.1:4444"),
TimeSpan.FromSeconds(60)),
desktopCapabilities);
}
Der empfohlene Elementort verwendet den XPath -Ausdruck (obwohl eine begrenzte Ausdrucksunterstützung)
var webBrowser = session.FindElement(By.XPath("//Pane[@AutomationId='webBrowser']"));
Element -Standortmechanismen, die unterstützt werden
TextBox#id Windows in der Win -Anwendung sind nicht wie Windows im Browser. Die Fenster ( ControlType.Window ) können im Steuerbaum in einem Tab verschachtelt werden.
Das Fenster kann entweder mit XPath Expression var window = session.FindElement(By.XPath("/Window/Pane/Window[@AutomationId='WindowName']")); oder durch Wechsel zu IT session.SwitchTo().Window("WindowName"); Im ersten Beispiel erhalten Sie die Elementreferenz, im anderen wird der interne Kontext auf ein neues Fenster umgestellt, und Elemente, die während der folgenden Operationen zwischengespeichert werden, können bei der Cloded session.Close() entsorgt werden.
Beachten Sie, dass Elementverpacker wie OpenQA.Selenium.Support.UI.SelectElement nicht funktionieren, da intern select und option erwartet werden.
Es gibt einen ziemlich hässlichen Hack, der die Notwendigkeit umgeht, Windows zu wechseln, wenn Sie mit dem XPath -Ausdruck nach einem untergeordneten Fenster suchen. Standardmäßig beginnt die Suche am Stammelement eines Fensters - dem Hauptfenster oder dem Fenster, auf das der Benutzer umgeschaltet wurde - und die Suche nach einem untergeordneten Fenster fehlte, da es sich nicht um ein direktes Kind des aktuellen Stammes handelte. Das Fix startet die Suche nach einem Fenster auf der oberen Ebene.