2017-01-28 2 views
0

Я пытаюсь нажать на стандартную кнопку HTML. Драйвер правильно находит элемент, и метод Click() завершается без каких-либо исключений, но щелчок не вызывается в браузере.Selenium .NET Click() не работает

Пример ниже просто открывает главную страницу Google и щелкает (или не удается щелкнуть) Мне повезет.

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")); 
    } 
} 

Я использую 32-разрядную версию IEDriverServer.exe.

Я использую версию IE 11.576.14393.0.

Версия для печати: 11.0.38.

Другие решения имеют одинаковую (не) аффект, однако я нашел полезное условие waitElementToBeClickable.

+0

Возможный дубликат [Селен/Firefox: Команда ".click()" не работает с найденного элемента] (http://stackoverflow.com/questions/15294630/selenium-firefox-command-click -doesnt-work-with-a-found-element) – Tom

+0

Независимо от браузера, иногда selenium не может щелкнуть найденный элемент. Один из вариантов - попробовать сделать это с помощью Javascript, используя 'JavascriptExecutor'. Вы также можете попробовать, протестировать, поставить некоторое время, чтобы подождать, прежде чем нажимать, потому что это может произойти из-за гоночных условий при исполнении. – Tom

ответ

0

Добавление ExpectedConditions.ElementToBeClickable Условие ожидания разрешило проблему.

[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")); 
    } 
} 
Смежные вопросы