Der Output sieht okay aus. Das der eine Error kommt ist klar, da der XPath falsch ist.
Im folgenden Script mal eine Variante die funktionieren sollte (XPath in Zeile 49), wenn man die entsprechenden Abhängigkeiten des WebDrivers (bzw. des Projektes au3WebDriver) eingebunden/included hat.
#AutoIt3Wrapper_AU3Check_Parameters=-d -w 1 -w 2 -w 4 -w 5 -w 6 -w 7
#AutoIt3Wrapper_AU3Check_Stop_OnWarning=y
#include-once
#include "wd_helper.au3"
#include "wd_core.au3"
Global $_WD_DRIVER
Global $sDesiredCapabilities
$_WD_DEBUG = $_WD_DEBUG_Full
Global $url = "https://autoit.de/wcf/login"
Global $user = "benutzernamen"
Global $password = "Passwort1234"
SetupEdge()
_WD_Startup()
_WD_ConsoleVisible(True)
Global $sSession = _WD_CreateSession($sDesiredCapabilities)
_WD_Navigate($sSession, $url)
_WD_LoadWait($sSession, 1500)
Sleep(500)
Global $sSelector = "//input[@id='username']"
_WD_WaitElement($sSession, $_WD_LOCATOR_ByXPath, $sSelector)
ConsoleWrite("+ @error = " & @error & @CRLF)
Global $sElement_user = _WD_FindElement($sSession, $_WD_LOCATOR_ByXPath, $sSelector)
If @error = $_WD_ERROR_Success Then
_WD_ElementAction($sSession, $sElement_user, 'value', $user)
Sleep(500)
EndIf
$sSelector = "//input[@id='password']"
_WD_WaitElement($sSession, $_WD_LOCATOR_ByXPath, $sSelector)
ConsoleWrite("+ @error = " & @error & @CRLF)
$sElement_user = _WD_FindElement($sSession, $_WD_LOCATOR_ByXPath, $sSelector)
If @error = $_WD_ERROR_Success Then
_WD_ElementAction($sSession, $sElement_user, 'value', $password)
Sleep(500)
EndIf
Global $sElement = _WD_FindElement($sSession, $_WD_LOCATOR_ByXPath, "//input[@type='submit']")
If @error = $_WD_ERROR_Success Then
_WD_ElementAction($sSession, $sElement, 'click')
EndIf
MsgBox(48, 'Warten', 'Mit okay beendet sich die Session und der WebDriver.')
_WD_DeleteSession($sSession)
_WD_Shutdown()
Exit
Func SetupEdge()
Local $iPort = _WD_GetFreePort(5555, 5600)
If @error Then Return SetError(@error, @extended, 0)
_WD_Option('Port', $iPort)
_WD_Option('DriverParams', '--port=' & $iPort & ' --verbose --log-path="' & @ScriptDir & '\msedge.log"')
_WD_Option('Driver', 'msedgedriver.exe')
$sDesiredCapabilities = '{"capabilities": {"alwaysMatch": {"unhandledPromptBehavior": "ignore", ' & _
'"ms:edgeOptions": {"excludeSwitches": ["enable-automation"], ' & _
'"useAutomationExtension": false, "args": ["start-maximized"]}}}}'
EndFunc
Alles anzeigen
Ergebnis war das gleiche, der Browser schließt sich wieder.
Alles klar, Danke Chris_ . Und was genau ist nun dein Problem? Willst du das sich der Browser nicht wieder schließt? Denn sobald deine Aktionen durchgeführt sind, also der Beispiel-Login, ist der Ablauf für den WebDriver gelaufen/fertig und dann folgt "Delete existing session" und "Kill the web driver console app".
❓ Ist deine Erwartung das der Browser dann offen bleibt oder wie?
⚠ Falls ja, dann nein so ist es nicht gedacht!
Aber: Du kannst bspw. "_WD_DeleteSession($sSession)" weglassen, richtig. Unsauber aber geht. Du kannst auch bevor das Teardown folgen sollte, eine MsgBox anzeigen lassen (siehe Beispiel-Code diesen Posts hier in Zeile 55) und erst wenn diese bestätigt wird, beendet sich deine WebDriver Automation.
Konsequenzen hat das Weglassen von _WD_DeleteSession nicht wirklich. Die Chrome- oder Edge-Daten, welche du für die Session benötigst, werden i.d.R. in TEMP geschrieben und dort kannst du sie entweder selbst wieder löschen oder sie werden bei "korrekten" Abbau der Session (Variante mit der MsgBox) automatisch gelöscht.
-----------------------------------
Ich hoffe dies hilft dir 🤝 .
💡 Du kannst dich allerdings auch in eine bestehende Browser-Sitzung, des normalen Browsers (nicht des Browser-Drivers), in der du deine Tabs hast usw., verbinden.
Siehe dazu FAQ im WebDriver Wiki .
Viele Grüße
Sven