Selenium Webdriver - метод Click() не работает с драйвером IE

Я использую драйвер IE с IE11. Для некоторых элементов метод Click будет выбирать только элемент, он не будет выполнять действие Click(). С ChromeDriver и FirefoxDriver тот же скрипт работает нормально.

Я установил возможности драйвера, как показано ниже.

DesiredCapabilities caps = DesiredCapabilities.internetExplorer();
caps.setCapability(InternetExplorerDriver.INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS, true);
caps.setCapability(InternetExplorerDriver.IGNORE_ZOOM_SETTING, true);
caps.setCapability(InternetExplorerDriver.REQUIRE_WINDOW_FOCUS, false);
caps.setCapability(InternetExplorerDriver.ENABLE_PERSISTENT_HOVERING, false);
caps.setCapability(InternetExplorerDriver.NATIVE_EVENTS, false);

Я нашел несколько решений по следующим ссылкам, но все еще сталкиваюсь с той же проблемой.

Проблема Selenium WebDriver Click в Internet Explorer

Selenium WebDriver в IE 9 при нажатии ссылки мигают, как будто какое-то событие клика не было полностью обработано

Selenium 2.0b3 IE WebDriver, клик не срабатывает


person Devang    schedule 08.09.2016    source источник
comment
Какой iedriverserver вы используете 64-bit или 32-bit?? а что произошло, когда вы собираетесь нажать с помощью WebElement.click()?? есть исключения??   -  person Saurabh Gaur    schedule 08.09.2016
comment
Я использую 32-битный драйвер, и при использовании element.click() исключений не обнаружено.   -  person Devang    schedule 08.09.2016
comment
Этот элемент корректно кликается вручную в браузере IE??   -  person Saurabh Gaur    schedule 08.09.2016
comment
@SaurabhGaur Я использую 64-битную ОС, но 64-битный IEdriver был очень медленным, и я нашел некоторые решения, связанные с этим, поэтому, в настоящее время использую 32-битный драйвер, также попробовал 64-битный драйвер, но столкнулся с той же проблемой.   -  person Devang    schedule 08.09.2016
comment
да, это кликабельно   -  person Devang    schedule 08.09.2016
comment
Вы используете 32-bit, это хорошо, вы пробовали использовать WebDriverWait, чтобы дождаться, когда это станет видимым и кликабельным?? или не могли бы вы поделиться своим кодом, как выполнить щелчок по нему ???   -  person Saurabh Gaur    schedule 08.09.2016
comment
@SaurabhGaur во время отладки я обнаружил, что элемент нельзя щелкнуть, и проблема была решена путем установки возможности IE caps.setCapability(InternetExplorerDriver.NATIVE_EVENTS, false);, но по-прежнему click() не работает во время выполнения скрипта.   -  person Devang    schedule 08.09.2016
comment
@SaurabhGaur да, элемент кликабельный, и метод isenable() также возвращает true.   -  person Devang    schedule 08.09.2016
comment
Тогда трудно сказать, почему он не доступен для кликов в IE, может быть проблема с его дизайном, попробуйте один раз использовать класс Actions как Actions::moveToElement(yourElement).click().perform();   -  person Saurabh Gaur    schedule 08.09.2016
comment
Я уже пробовал это.   -  person Devang    schedule 08.09.2016
comment
Затем вы также можете попробовать альтернативное решение, используя JavascriptExecutor как ((JavascriptExecutor)driver).executeScript("arguments[0].cli‌​ck()", yourElement);..   -  person Saurabh Gaur    schedule 08.09.2016


Ответы (1)


Трудно сказать, почему это не кликабельно на IE, возможно, это проблема дизайна.

Если вы испробовали все возможности, но ничего не получилось, попробуйте использовать JavascriptExecutor в качестве альтернативного решения, как показано ниже:

((JavascriptExecutor)driver).executeScript("arguments[0].cli‌​ck()", yourElement);

Примечание. Внедрение JavaScript HTMLElement.click() не следует использовать в контексте тестирования. Это противоречит цели теста. Во-первых, потому что он не генерирует все события, как настоящий click (focus, blur, mousedown, mouseup...), а во-вторых, потому что он не гарантирует, что реальный пользователь сможет взаимодействовать с элементом. Но чтобы избавиться от этой проблемы, вы можете рассмотреть это как альтернативное решение.

person Saurabh Gaur    schedule 08.09.2016
comment
Я могу щелкнуть с помощью JavascriptExecutor, но, используя этот способ, мне нужно написать отдельный метод щелчка, потому что я думаю, что использование JavascriptExecutor для каждого щелчка не является хорошим способом. - person Devang; 08.09.2016
comment
Да, вы правы, вы должны создать отдельный метод клика как clickByJs().. :) - person Saurabh Gaur; 08.09.2016