2013-06-14 3 views
4

Я пишу интеграционные тесты в C#, и когда я использую метод click() для определенных элементов внутри диалогового окна, ничего не происходит, и я не получаю никаких ошибок. Он щелкнет некоторые элементы внутри диалогового окна, но не другие. Я думал, что если он не будет их правильно выбирать, он будет бросать и исключать, но он работает гладко и говорит, что тест прошел, даже если он на самом деле не нажал кнопку. Диалоговое окно представляет собой iframe.Selenium chrome driver click() метод не всегда нажимает на элементы

Я подумал, что он пытается нажать на кнопку, которая еще не была включена или отображения, поэтому я добавил это перед кнопкой() вызова:

_driver.SwitchTo().Frame(_frameElement); 
    _wait.Until(d => 
    { 
     var shippingInfoButton = d.FindElement(By.CssSelector("input[title ='Info']")); 
     return shippingInfoButton.Displayed && shippingInfoButton.Enabled; 
    }); 
     var infoButton = _driver.FindElement(By.CssSelector("input[title ='Info']")); 
     ScrollToElement(infoButton); 
     infoButton.Click(); 

снова это работает без каких-либо исключений, выброшенных так что я m, предположив, что он нашел элемент, и он отображается и активируется.

Сообщите мне, если вам нужна дополнительная информация. Спасибо

+0

где вы нажимаете? Из того, что я вижу, вы только находите элемент? – Amey

+0

прямо под этой строкой кода. – Mitch

+0

Я вижу, что вы обновили свой вопрос. – Amey

ответ

6

Не могу объяснить, почему метод sclen .click() не запускает некоторые элементы на странице, но не другие, но я нашел решение.

Используя IJavaScriptExecutor, вы можете щелкнуть элемент, используя javascript, и в моем случае это сработало.

Вот код для запуска IJavaScriptExecutor и ниже - мой метод.

//IJavaScriptExecutor 
    IJavaScriptExecutor js = _driver as IJavaScriptExecutor; 

     js.ExecuteScript("arguments[0].click();", infoButton); 

    //my whole method for clicking the button and returning the page object 
    public ShippingMethodDetailsPageObject SelectShippingMethodInfo() 
    { 
     _driver.SwitchTo().Frame(_frameElement); 
     _wait.Until(d => 
     { 
     var shippingInfoButton = d.FindElement(By.CssSelector("input[title='Info']")); 
      return shippingInfoButton.Displayed && shippingInfoButton.Enabled; 
     }); 

     var infoButton = _driver.FindElement(By.CssSelector("input[title ='Info']")); 
     IJavaScriptExecutor js = _driver as IJavaScriptExecutor; 

     js.ExecuteScript("arguments[0].click();", infoButton); 
     _driver.SwitchTo().DefaultContent(); 

     return new ShippingMethodDetailsPageObject(_driver, false); 
    } 
+0

Это тот, который работал для меня с последним драйвером хрома, я пробовал все остальное, но все же он не смог щелкнуть элемент метки. Большое спасибо. 'protected static void ClickUsingJS (IWebElement elem) { // var infoButton = CurrentDriver.FindElement (By.CssSelector (" input [title = 'Info'] ")); IJavaScriptExecutor js = CurrentDriver as IJavaScriptExecutor; js.ExecuteScript ("arguments [0] .click();", elem); CurrentDriver.SwitchTo(). DefaultContent(); } 'Это должно быть принято как ответ. Ура! – rahoolm

+0

это работает, но было бы важно предупредить, что это маскирующие потенциальные ошибки. Нативный селеновый щелчок выдает ошибку, если элемент не является кликабельным (что хорошо), а это не так. – Benja

4

У меня возникла аналогичная проблема. Если это одна и та же проблема, в ChromeDriver есть ошибка, она не может щелкнуть некоторые элементы из-за окружающих div и т. Д. Бит хромой действительно.

Простым решением является отправка ключа ввода, например. element.SendKeys (Keys.Enter). Кажется, работает во всех браузерах.

+0

Я собираюсь попробовать это! Спасибо за помощь. – Mitch

+0

Здесь стоит отметить следующее: если вы пытаетесь щелкнуть что-то, что не является ссылкой или кнопкой и т. Д., То вам нужно будет добавить к нему tabindex и прослушать клавиатуру. – Wil

+0

Не могли бы вы подробнее рассказать? Проблема заключается в автоматическом нажатии на этот элемент и не прослушивании щелчка чего-то другого. Благодарю. – cheesesharp

0

У меня есть несколько тестов, которые работают в Firefox все время, а в Chrome это сводило меня с ума, потому что иногда оно прошло успешно, а иногда «.click» не работало, и это не сработало.

Занимал много времени, чтобы заметить это, но причина была: я иногда уменьшал браузер до 80%, чтобы видеть браузер рядом с моей IDE. похоже, что «.click» не работает, когда я это сделал.

По крайней мере, для меня это был вопрос

 Смежные вопросы

  • Нет связанных вопросов^_^