Skip to content

JavascriptError occurs when executing WebElement.getAttribute('value'), WebElement.isDisplayed(), or WebElement.submit() in Edge/IE mode on pages with document mode 7 or lower #210

@yusuke-noda

Description

@yusuke-noda

I reported a bug to Selenium Team, but was directed here even though it was a problem with their code.

SeleniumHQ/selenium#16618

Description

When executing WebElement.getAttribute('value') in Edge's IE mode on a page with document mode 7 or lower, the following error occurs.
This error also occurs when executing WebElement.isDisplayed().

JavascriptError: Error from JavaScript: 'HTMLFormElement' is undefined
at Object.throwDecodedError (C:\myproject\node_modules\selenium-webdriver\lib\error.js:523:15)
at parseHttpResponse (C:\myproject\node_modules\selenium-webdriver\lib\http.js:524:13)
at Executor.execute (C:\myproject\node_modules\selenium-webdriver\lib\http.js:456:28)
at process.processTicksAndRejections (node:internal/process/task_queues:105:5)
at async Driver.execute (C:\myproject\node_modules\selenium-webdriver\lib\webdriver.js:745:17)
at async C:\myproject\test.js:11:19 {
remoteStacktrace: ''
}

Also, when executing WebDriver.submit() in Edge's IE mode on a page with document mode 8 or lower, a similar error occurs.

JavascriptError: Error from JavaScript: Object doesn't support property or method 'createEvent'
at Object.throwDecodedError (C:\myproject\node_modules\selenium-webdriver\lib\error.js:523:15)
at parseHttpResponse (C:\myproject\node_modules\selenium-webdriver\lib\http.js:524:13)
at Executor.execute (C:\myproject\node_modules\selenium-webdriver\lib\http.js:456:28)
at process.processTicksAndRejections (node:internal/process/task_queues:105:5)
at async Driver.execute (C:\myproject\node_modules\selenium-webdriver\lib\webdriver.js:745:17)
at async C:\myproject\test.js:11:5 {
remoteStacktrace: ''
}

Reproducible Code

test.js

const { Builder, Browser, By } = require('selenium-webdriver');

(async () => {
  let driver;
  try {
    driver = await new Builder().forBrowser(Browser.INTERNET_EXPLORER)
                                .setIeOptions({'se:ieOptions': { 'ie.edgechronium': true }})
                                .build();
    await driver.get('http://localhost:4000/ie5.html'); // this page is documentMode 5
    const elm = driver.findElement(By.css('input'));
    const value = await elm.getAttribute('value');
    console.log(value);
  } catch (e) {
    console.log(e)
  } finally {
    await driver.quit();
  }
})();

ie5.html

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="X-UA-Compatible" content="IE=5"> 
<title>ie5</title>
</head>
<body>
<form>
<input type="text" value="foo">
</form>
</body>
</html>

The following code is causing this bug.
In IE with document mode 7 or lower, an error occurs because HTMLFormElement is undefined.

https://github.com/SeleniumHQ/selenium/blob/e0afdd3bfa050955d566e9cff40f2fbd6206ff46/javascript/atoms/domcore.js#L166-L178

For submit() issue, this is because document.createEvent is undefined in document mode 8 and below.

https://github.com/SeleniumHQ/selenium/blob/e0afdd3bfa050955d566e9cff40f2fbd6206ff46/javascript/selenium-webdriver/lib/webdriver.js#L2960-L2973

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions