Selenium WebDriver Click() не работает с IE9

(Я просмотрел много других подобных сообщений на SO и, к сожалению, не смог решить эту проблему, так что здесь...)

Я использую Selenium WebDriver (реализация C#, версия 2.15) для управления довольно простой веб-страницей. Страница содержит форму с двумя для имени пользователя и пароля и одним для отправки формы. Я могу успешно ввести значения для имени пользователя и пароля, но вызов Click() на кнопке отправки, похоже, не имеет никакого эффекта.

По другим рекомендациям я попробовал следующие приемы, ни один из которых не сработал:

  • Изменить фокус окна на currentWindowHandle
  • Нажмите на родителя элемента, затем на элемент
  • Добавьте долгое неявное ожидание
  • Добавьте долгое явное ожидание (от 20 секунд сна)
  • Нажмите целую кучу раз на элементе
  • Используйте Submit() вместо Click()
  • Отправьте ключи "\n" элементу (Selenium сообщает об этом как об ошибке)

Обратите внимание, что я убедился, что кнопка действительно успешно найдена, так что это не проблема.

Также обратите внимание, что я убедился, что кнопка действительно работает за пределами Selenium-land. То есть я могу зайти на сайт, ввести учетные данные и нажать кнопку "Отправить" (и это работает!).

Также обратите внимание, что эта проблема в IE. Это не происходит для меня с Chrome и FF7.

Так что сказал, у кого-нибудь есть другие идеи?

10 ответов

Решение

Является ли ваш сайт общедоступным для тестирования? Ваш уровень масштабирования IE на 100%? Для работы с родными событиями клика требуется документация.

Уровень масштабирования браузера должен быть установлен на 100%, чтобы события собственной мыши могли быть установлены в правильные координаты.

Если это не работает, то, похоже, ошибка в webdriver. Вы должны открыть вопрос здесь.

Сказав это, вы, вероятно, могли бы пойти тем же путем сценария Java как временное решение. Что-то вроде,

driver.navigate().to("javascript:document.getElementById('yoursubmitbutton').click()");

Похоже, что это может быть проблема с тем, где происходит щелчок мыши. Я попытался использовать механизм Actions в Selenium, чтобы вызвать щелчок мышью с небольшим смещением. Успешно щелкните элемент:

new Actions(GuiOps.driver).MoveToElement(e).MoveByOffset(5,5).ClickAndHold().Release().Perform();

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

Например

btn.Sendkeys(Keys.Enter); 

У меня была эта проблема. Я не могу вспомнить пост, где я нашел разрешение, но я обнаружил, что у меня работает следующее:

На кнопке:

  var navButton = driver.FindElement(By.Id("NavButton"));
 ((IJavaScriptExecutor)driver).ExecuteScript("arguments[0].fireEvent('onclick');", navButton);

Работает каждый раз.

У меня также были проблемы с отправкой события click в строку таблицы. Иногда.Click() фактически отправляет событие в строку выше (у нас ужасно сложная структура таблицы, внутри которой есть скрытая кнопка-переключатель, которая также не активируется при использовании Selenium). Вышеупомянутый хак не будет работать с ячейками, которые были доступны через FindElement.

В конце концов, единственное, что сработало, - это выбрать изображение в этой строке и отправить на него щелчок.

var img = driver.FindElement(By.Id("fim{4C3DE9FA-45B0-40E0-BD95-9EE0374EA38A}"));
((IJavaScriptExecutor)driver).ExecuteScript("arguments[0].fireEvent('onclick');", img);

Надеюсь, это поможет.

Попробуй это..
WebElement hiddenWebElement = d.findElement (By.xpath (xpath));
((JavascriptExecutor) г).executeScript("Аргументы [0].click()",hiddenWebElement);

Следующее работало для меня:

@FindBy(id = "submit_action")
WebElement submitButton_;
...
public void clickSubmit() {

    if (driver_ instanceof InternetExplorerDriver) {
        ((JavascriptExecutor) driver_).executeScript("arguments[0].fireEvent('onclick');", submitButton_);
    }
    else {
        submitButton_.click();
    }
}

Поскольку fireEvent поддерживается только IE, следовательно, альтернатива.

Возможно, вам нужно установить для параметра "Разрешить собственные события" значение "true", когда вы запускаете его в IE, и если вы хотите запускать один и тот же код в FF и Chrome, то в этих обозревателях необходимо также включить "родные" события в "true".

Вы можете сделать это, когда настраиваете браузер, в котором хотите запустить.

Использование FindElement(By.CSSSelector("'CSSPath'")); Если у вас есть какой-либо CSS-код, примененный к кнопке, его более согласованно можно написать другие несколько операторов, чтобы найти элемент с альтернативными средствами, такими как ID, тег или т. Д. С WebDriverWait метод

Попробуй код -

driver.FindElement(By.Id("btn")).sendkeys("\n");

Еще один возможный обходной путь может быть похож на повторение нажатия, например:

Btn.click();
Btn.click();

Потому что 1-й щелчок просто устанавливает фокус, а 2-й выполняет настоящий щелчок. Это сработало для меня.

Другие вопросы по тегам