Selenium: NoSuchElementException in Internet Explorer

I'm trying to port a Selenium script for an internal Webapp from Selenium IDE to a Selenium Grid setup with RemoteWebDrivers in Java.

The scripts work fine with Chrome and Firefox, but not in Internet Explorer. Every time I try to find an element in a page, I only get a NoSuchElementException (The page itself loads just fine).

Sample Code that exhibits the same behaviour using a Wikipedia page:

public class Wikipedia_test_IE {
 private WebDriver driver = null;
 private String baseUrl = null;
 private boolean acceptNextAlert = true;
 private StringBuffer verificationErrors = new StringBuffer();


 @Before
 public void setUp() throws Exception {
//      DesiredCapabilities cap = DesiredCapabilities.firefox();
 DesiredCapabilities cap = DesiredCapabilities.internetExplorer();
 cap.setCapability(CapabilityType.VERSION, "9");

        driver = new RemoteWebDriver (new URL("http://192.168.1.230:4444/wd/hub"), cap);    
        baseUrl = "https://en.wikipedia.org/wiki/Rosetta_%28spacecraft%29";
        driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
 }

 @Test
 public void testAKTargobankTestfall1KN() throws Exception {
      driver.get(baseUrl);
      driver.findElement(By.linkText("space probe")).submit();
 }
}

I've tried using findElement(By.Id) and findElement(By.cssSelector) - no effect. Putting in a delay between pageload and the selection has no effect either, nor does using click instead of submit.

I've enabled debug logging of the IE Driver, but the Output doesn't help me to understand what the problem may be - hope someone else can.

server.cc(239) Command: POST /session {"desiredCapabilities":{"platform":"WINDOWS","ensureCleanSession":true,"browserName":"internet explorer","version":"9"}}
IESession.cpp(43) Mutex acquired for session initalization
IESession.cpp(105) Releasing session initialization mutex
command.cc(33) Raw JSON command: { "command" : "newSession", "locator" : { }, "parameters" : {"desiredCapabilities":{"platform":"WINDOWS","ensureCleanSession":true,"browserName":"internet explorer","version":"9"}} }
BrowserFactory.cpp(68) Ignoring Protected Mode Settings: 0
BrowserFactory.cpp(71) Checking validity of Protected Mode settings.
BrowserFactory.cpp(984) Detected IE version: 9, detected Windows version: 6
BrowserFactory.cpp(1074) Found Protected Mode setting value of 0 for zone 1
BrowserFactory.cpp(1074) Found Protected Mode setting value of 0 for zone 2
BrowserFactory.cpp(1074) Found Protected Mode setting value of 0 for zone 3
BrowserFactory.cpp(1074) Found Protected Mode setting value of 0 for zone 4
BrowserFactory.cpp(74) Has Valid Protected Mode Settings: 1
BrowserFactory.cpp(170) Starting IE using the IELaunchURL API
BrowserFactory.cpp(124) IE launched successfully with process ID 2188
BrowserFactory.cpp(130) Process with ID 2188 is executing iexplore.exe
BrowserFactory.cpp(313) Ignoring zoom setting: 0
BrowserFactory.cpp(581) Browser zoom level is 100%
IECommandExecutor.cpp(650) Persistent hovering set to: 1
ProxyManager.cpp(118) Using existing system proxy settings.
server.cc(308) Response: {"sessionId":"4aba017b-91e9-4f48-9f9f-f38b0464bb6b","status":303,"value":"/session/4aba017b-91e9-4f48-9f9f-f38b0464bb6b"}


server.cc(239) Command: GET /session/4aba017b-91e9-4f48-9f9f-f38b0464bb6b {}
command.cc(33) Raw JSON command: { "command" : "getSessionCapabilities", "locator" : { "sessionid" : "4aba017b-91e9-4f48-9f9f-f38b0464bb6b" }, "parameters" : {} }
IECommandExecutor.cpp(544) No alert handle is found
server.cc(308) Response: {"sessionId":"4aba017b-91e9-4f48-9f9f-f38b0464bb6b","status":0,"value":{"browserAttachTimeout":0,"browserName":"internet explorer","cssSelectorsEnabled":true,"elementScrollBehavior":0,"enableElementCacheCleanup":true,"enablePersistentHover":true,"handlesAlerts":true,"ie.browserCommandLineSwitches":"","ie.ensureCleanSession":false,"ie.forceCreateProcessApi":false,"ie.usePerProcessProxy":false,"ignoreProtectedModeSettings":false,"ignoreZoomSetting":false,"initialBrowserUrl":"http://localhost:15278/","javascriptEnabled":true,"nativeEvents":true,"platform":"WINDOWS","requireWindowFocus":false,"takesScreenshot":true,"unexpectedAlertBehaviour":"dismiss","version":"9"}}

server.cc(239) Command: POST /session/4aba017b-91e9-4f48-9f9f-f38b0464bb6b/timeouts/implicit_wait {"ms":30000}
command.cc(33) Raw JSON command: { "command" : "implicitlyWait", "locator" : { "sessionid" : "4aba017b-91e9-4f48-9f9f-f38b0464bb6b" }, "parameters" : {"ms":30000} }
IECommandExecutor.cpp(544) No alert handle is found
server.cc(308) Response: {"sessionId":"4aba017b-91e9-4f48-9f9f-f38b0464bb6b","status":0,"value":null}

server.cc(239) Command: POST /session/4aba017b-91e9-4f48-9f9f-f38b0464bb6b/url {"url":"https://en.wikipedia.org/wiki/Rosetta_%28spacecraft%29"}
command.cc(33) Raw JSON command: { "command" : "get", "locator" : { "sessionid" : "4aba017b-91e9-4f48-9f9f-f38b0464bb6b" }, "parameters" : {"url":"https://en.wikipedia.org/wiki/Rosetta_%28spacecraft%29"} }
IECommandExecutor.cpp(544) No alert handle is found
Browser.cpp(421) Navigate Events Completed.
Browser.cpp(452) Browser ReadyState is not '4', indicating 'Complete'; it was 1
Browser.cpp(421) Navigate Events Completed.
Browser.cpp(437) Browser busy property is true.

(The last two lines repeat several times)

ElementRepository.cpp(107) Refreshing managed element cache. Found 0 to remove from cache.
Browser.cpp(421) Navigate Events Completed.
Browser.cpp(476) Waiting for document to complete...
Browser.cpp(481) Not in navigating state
server.cc(308) Response: {"sessionId":"4aba017b-91e9-4f48-9f9f-f38b0464bb6b","status":0,"value":null}

server.cc(239) Command: POST /session/4aba017b-91e9-4f48-9f9f-f38b0464bb6b/element {"using":"link text","value":"space probe"}
command.cc(33) Raw JSON command: { "command" : "findElement", "locator" : { "sessionid" : "4aba017b-91e9-4f48-9f9f-f38b0464bb6b" }, "parameters" : {"using":"link text","value":"space probe"} }
IECommandExecutor.cpp(544) No alert handle is found
ElementFinder.cpp(49) Using FindElement atom to locate element having linkText = space probe
Browser.cpp(114) No child frame focus. Focus is on top-level frame
Script.cpp(485) -2147024891 [Zugriff verweigert]: Unable to execute code, call to IHTMLWindow2::execScript failed
Script.cpp(171) Cannot create anonymous function
ElementFinder.cpp(84) Unexpected error attempting to find element by mechanism linkText with criteria space probe

Any ideas?

Upvotes: 3

Views: 3079

Answers (5)

Aniket Samanta
Aniket Samanta

Reputation: 1

You can write your code in the following way:

while(true) {
    try {
        driver.findElement(By.linkText("space probe")).submit();
        break;
    } catch (Exception e) {
        continue;
    }
}

I write my code like this so that the thread searches until success. When using implicitlyWait, the browser will only wait for the maximum of that time. But it may happen that your browser page loading has been completed but the desired portion is loaded by an ajax call. In that case your program will throw an error.

Upvotes: 0

Thanks for the help. To answer some of the Questions noted above, which i should have included in the original Post:

-Yes, it's indeed IE 9 -I had already set protected mode to enabled in all security zones -using click instead of submit did not make a difference (initially)

It just so happens that the VM that's running the Selenium node applied security updates during the night, and that included one for IE.

At first, i got a different error message than i did before - IE was not able to find the browser window that was just opened, and the windows were not closed either. All the security settings had been reset by the update.

After re-enabling protected mode everything now works. As Richard noted i did need to change the find element to .click() instead of .submit().

So, everything now works, and i have no idea why. Thanks again!

Upvotes: 1

Pascal
Pascal

Reputation: 74

Try to use InternetExplorerDriver instead of RemoteWebDriver normally it shouldn't make a difference but with IE all is possible-.-

I got similar problems and I end up with the following Code which works for me:

@Before
public void setUp() {
   //... some irrelevant Code ... 

   System.setProperty("webdriver.ie.driver", "Path to IEDriver.exe");
   InternetExplorerDriver driver = new InternetExplorerDriver();

   //... some irrelevant Code ...
}

Upvotes: 0

Quiro
Quiro

Reputation: 1

I also had got also that error on tests that worked fine on FF but not on IE.

I can suggest you:

  • To check the protected mode settings on IE.
  • To disable native events on the IE driver.
  • To Use JavaScript on those particular cases (The worst one on my point of view).

This is a known problem with the IE driver.

http://jimevansmusic.blogspot.be/2012/08/youre-doing-it-wrong-protected-mode-and.html http://jimevansmusic.blogspot.be/2013/01/revisiting-native-events-in-ie-driver.html

Upvotes: 0

Richard
Richard

Reputation: 9029

You should probably be using click(), not submit():

driver.findElement(By.linkText("space probe")).click();

Upvotes: 0

Related Questions