2017-08-08 2 views
1

In C# Selen gefunden, ich bin FindElement mit einem Element zu finden, die nicht in der Seite ist, sondern NoSuchElementException das Erhalten ich WebDriverExceptionC# Selen: Erste WebdriverException, wenn das Element nicht

Die Ausnahme ist:

at OpenQA.Selenium.Remote.HttpCommandExecutor.CreateResponse(WebRequest request) 
    at OpenQA.Selenium.Remote.HttpCommandExecutor.Execute(Command commandToExecute) 
    at OpenQA.Selenium.Firefox.FirefoxDriverCommandExecutor.Execute(Command commandToExecute) 
    at OpenQA.Selenium.Remote.RemoteWebDriver.Execute(String driverCommandToExecute, Dictionary`2 parameters) 
    at OpenQA.Selenium.Remote.RemoteWebDriver.FindElement(String mechanism, String value) 
    at org.myorg.DriverUtils.FindElement(By by, Boolean raiseException, Boolean setTestFail, Int32 currentAttempt) 

die WebDriver:

var downloadDir = "path to downoads"; 
var fxprofile = new FirefoxProfile(); 
fxprofile.SetPreference("browser.download.folderList", 2); 
fxprofile.SetPreference("browser.download.dir", downloadDir); 
fxprofile.SetPreference("browser.download.defaultFolder", downloadDir); 
fxprofile.SetPreference("browser.download.useDownloadDir", true); 
fxprofile.SetPreference("pdfjs.disabled", true); 


var profileM = new FirefoxProfileManager(); 
var profile = profileM.GetProfile("fxprofile"); 
var options = new FirefoxOptions(); 
var firefoxBinary = "path to firefox exe"; 

Driver = new FirefoxDriver(firefoxBinary, fxprofile); 

try{ 
    Driver.FindElement(By.Id("non exeistant element")); 
} 
catch (NoSuchElementException e) 
{ 
// not hit 
} 
catch (WebDriverException e) 
{ 
    //Hit here 
    // Another thing i noticed is it takes almost a minute to actually throw this exception from the FindElement 
} 
+0

Dies sieht nicht wie eine Ausnahme aus, sondern die Stack-Ablaufverfolgung der Ausnahme, Sie müssen die Ausnahme auch posten. Wird dein Firefox gestartet? –

+0

ja Firefox startet., Als ich durch den Code (F10) navigiert, traf es die WebdriverException –

Antwort

1

ich es geschafft, um die Ursache zu debuggen und zu finden.

Vor kurzem habe ich die folgende implizite Wartezeit für die Fehlersuche verwendet, und es endete der Täter

Driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromMinutes(2)); 

zu sein, aber wenn ich die FirefoxDriver erstellen, initialisiert er die Basisklasse RemotewebDriver mit einem Standard-Befehl Timeout von 1 min

public FirefoxDriver(FirefoxBinary binary, FirefoxProfile profile) 
     : this(binary, profile, RemoteWebDriver.DefaultCommandTimeout) 
    { 
    } 

Also, im Grunde hat sich die FirefoxCommandExecutor vor der impliziten Warte abgeschlossen, die ich konfiguriert haben, und das machte den Fahrer WebdriverException Inste zu werfen Anzeige von NosuchElementexception. Ich habe die implizite Wartezeit auf 20 Sekunden zurückgesetzt und das Problem ist verschwunden.

Ich bin mir nicht sicher, ob dies ein wie die FirefoxDriver sollte funktionieren oder wenn dies ein Fehler ist. Vielleicht sollte Firefoxdriver das standardmäßige Befehlstimeout aktualisieren, wenn auch imiclictinit gesetzt ist.

Verwandte Themen