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-й выполняет настоящий щелчок. Это сработало для меня.