2017-01-28 2 views
0

Ich versuche, auf eine Standard-HTML-Schaltfläche klicken. Der Treiber findet das Element korrekt und die Click()-Methode wird ohne Ausnahme abgeschlossen, aber der Klick wird im Browser nicht aufgerufen.Selenium .NET Click() funktioniert nicht

Das folgende Beispiel öffnet nur die Google-Startseite und klickt (oder schlägt fehl) auf die Schaltfläche Ich fühle mich glücklich.

private static readonly InternetExplorerOptions INTERNET_EXPLORER_OPTIONS = new InternetExplorerOptions 
{ 
    IgnoreZoomLevel = true 
}; 

[Test] 
public void Clicking() 
{ 
    using (var driver = new InternetExplorerDriver(INTERNET_EXPLORER_OPTIONS)) 
    { 
     driver.Navigate().GoToUrl("http://www.google.com"); 

     driver.FindElement(By.Name("btnI")).Click(); 

     Assert.That(driver.Url, Is.EqualTo("https://www.google.com/doodles")); 
    } 
} 

Ich bin mit der 32-Bit-Version von IEDriverServer.exe.

Ich verwende IE-Version 11.576.14393.0.

Aktualisierungsversion: 11.0.38.

Die anderen Lösungen haben die gleiche (nicht) beeinflussen, aber ich habe eine nützliche wait Bedingung ElementToBeClickable gefunden.

+0

Mögliche Duplikat [Selen/Firefox: Befehl ".click()" nicht mit einem Element gefunden arbeiten] (http://stackoverflow.com/questions/15294630/selenium-firefox-command-click -doesnt-work-with-a-found-element) – Tom

+0

Unabhängig vom Browser kann Selen manchmal nicht auf ein gefundenes Element klicken. Eine Möglichkeit besteht darin, dies über Javascript mit 'JavascriptExecutor' zu versuchen. Sie könnten auch versuchen, etwas zu testen, etwas warten, bevor Sie klicken, weil es aufgrund der Rennbedingungen in der Ausführung passieren kann. – Tom

Antwort

0

Das Hinzufügen der ExpectedConditions.ElementToBeClickable Wartebedingung löste das Problem.

[Test] 
public void Clicking() 
{ 
    using (var driver = new InternetExplorerDriver()) 
    { 
     driver.Navigate().GoToUrl("http://www.google.com"); 

     var button = driver.FindElement(By.Name("btnI")); 
     Assert.That(button.TagName, Is.EqualTo("input")); 

     var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10)); 
     wait.Until(ExpectedConditions.ElementToBeClickable(button)); 
     button.Click(); 
     wait.Until(webDriver => webDriver.Url == "https://www.google.com/doodles"); // <== wait until condition here 
     Assert.That(driver.Url, Is.EqualTo("https://www.google.com/doodles")); 
    } 
}