System.NotImplementedException: Element ist nicht mehr gültig-Selenium-Webdriver
Dies ist driving me crazy und ich haben versucht, mit By.Id or By.Xpath
aber keiner funktioniert und hier ist mein Select Method
versuchen, wählen Sie den text aus der Dropdownlist
//Test-code
SelectMyText(By.XPath("//*[@id='ctl00_ContentPlaceHolder1_ddlCategory']"), "Employee");
//Methode:
public void SelectMyText(By locator, string valueToBeSelected)
{
var options = GetElementId(locator).FindElements(By.TagName("option"));
foreach (var option in options)
{
if (valueToBeSelected == option.Text)
{
option.Click();
return;
}
}
}
public IWebElement GetElementId(By locator)
{
return Driver.FindElement(locator);
}
Hier ist der Fehler immer:
threw exception:
System.NotImplementedException: Element is no longer valid
at OpenQA.Selenium.Remote.RemoteWebDriver.UnpackAndThrowOnError(Response errorResponse)
at OpenQA.Selenium.Remote.RemoteWebDriver.Execute(String driverCommandToExecute, Dictionary`2 parameters)
at OpenQA.Selenium.Remote.RemoteWebDriver.InternalExecute(String driverCommandToExecute, Dictionary`2 parameters)
at OpenQA.Selenium.Remote.RemoteWebElement.Execute(String commandToExecute, Dictionary`2 parameters)
at OpenQA.Selenium.Remote.RemoteWebElement.get_Text()
Hier sind die screenshots von diesem Fehler:
- Es könnte sein, weil der browser hat eine Neuorganisation der DOM. Versuchen Sie das einwickeln, dass der code in einen try-catch-und wenn es scheitert, ruft der code wieder. Wenn es funktioniert, das 2. mal, dann ist das wahrscheinlich der Fall ist, und Sie brauchen, um zu bauen 'stabilization-code' in deine test wiederholen, dass eine angemessene Anzahl von Zeiten, bevor Sie schließlich aufgeben.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nun, Ihre Frage ist aus der Kategorie der Fragen, wie es möglich ist, wählen Sie eine option aus dem dropdown-Menü. Normalerweise verwende ich 2 Ansätze:
Ansatz 1(über Aktionen-generator, erweiterte Benutzer-Aktionen-api):
;
Einige zusätzliche Infos, die Sie bekommen können hier
zweiten Ansatz (mit js direkt):
Hoffe, das funktioniert für Sie)
die Idee ist ganz einfach. wenn Sie vermuten, dass das element des seins unzugänglich wären, unsichtbar, etc Sie verwenden können, js zu überlisten)
so wie folgenden haben wir einige Methoden:
-getText
-clickontheelement
-getelementproperty
Hoffe das hilft dir)