NoSuchElementException происходит во время внедрения InternetExplorerDriver в Selenium WebDriver
В настоящее время я работаю над WebDriver, чтобы вызвать браузер IE для запуска тестирования. Но я получил NoSuchElementException
, когда попытался запустить простой пример ниже.
Однако код просто работал нормально, если я использовал драйвер Chrome или Firefox.
Любая идея или мысль будут оценены.
Jar: selenium-server-standalone-2.5.0.jar
код:
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.ie.InternetExplorerDriver;
import org.openqa.selenium.remote.DesiredCapabilities;
public static void main(String[] args) throws InterruptedException {
DesiredCapabilities ieCapabilities = DesiredCapabilities.internetExplorer();
ieCapabilities.setCapability(InternetExplorerDriver.INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS, true);
WebDriver driver = new InternetExplorerDriver(ieCapabilities);
driver.get("www.google.com");
driver.findElement(By.name("q"));
}
Сообщение об ошибке:
Exception in thread "main" org.openqa.selenium.NoSuchElementException: Unable to find element with name == q (WARNING: The server did not provide any stacktrace information)
For documentation on this error, please visit: http://seleniumhq.org/exceptions/no_such_element.html
Build info: version: '2.5.0', revision: '13516', time: '2011-08-23 18:29:57'
System info: os.name: 'Windows 7', os.arch: 'x86', os.version: '6.1', java.version: '1.6.0_25'
Driver info: driver.version: RemoteWebDriver
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
at org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:131)
at org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:105)
at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:409)
at org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:197)
at org.openqa.selenium.remote.RemoteWebDriver.findElementByName(RemoteWebDriver.java:246)
at org.openqa.selenium.By$ByName.findElement(By.java:298)
at org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:189)
at lib.WebDriver2.main(WebDriver2.java:14)
Ответы
Ответ 1
Вы явно избегали устанавливать параметры защищенного режима IE. То, что делает настройка InternetExplorerDriver.INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS
. Когда вы удаляете эту настройку и устанавливаете параметры защищенного режима, как описано в вики проекта, кажется, что проблема решает сам.
Ответ 2
Попробуйте добавить неявное ожидание, как показано ниже. Также, как сказал Роберт, ваш URL должен иметь http://
WebDriver driver = new InternetExplorerDriver(ieCapabilities);
driver.manage().timeouts().implicitlyWait(90, TimeUnit.SECONDS);
Ответ 3
На веб-сайте проекта была скопирована запись в FAQ (скопировано около Selenium 2.9):
InternetExplorerDriver требует, чтобы все домены безопасности были установлены к одному и тому же значению (либо доверенным, либо ненадежным). Если вы не находитесь в чтобы изменить домены безопасности, вы можете переопределить проверьте следующее:
DesiredCapabilities capabilities =
DesiredCapabilities.internetExplorer();
capabilities.set(InternetExplorerDriver.INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS,
true);
WebDriver driver = new InternetExplorerDriver(capabilities);
Как можно сказать по имени константы, это может привести к взлому в ваших тестах. Если все сайты находятся в одном и том же домене защиты, вы должно быть хорошо.
Параллельное сообщение С# InvalidOperationException:
Неожиданная ошибка запуска Internet Explorer. Защищенный режим должен быть установленное на одно и то же значение (включено или отключено) для всех зон. (NoSuchDriver)
и С# вместо настройки параметров IE (лучше всего догадаться с февраля 2016 года):
var ieOptions = new OpenQA.Selenium.IE.InternetExplorerOptions {
IntroduceInstabilityByIgnoringProtectedModeSettings = true };
using (var driver = new InternetExplorerDriver(ieOptions))
{
Все это было частью issue 1795 в поисковом журнале Selenium.