I have written a login script and when I execute it using ChromeDirver and FFDriver it works fine. But when I run the same using IE Driver it fails and giving the below error.
Exception in thread "main" org.openqa.selenium.NoSuchElementException: Unable to find element with css selector == #mod\-login\-username
For documentation on this error, please visit: http://seleniumhq.org/exceptions/no_such_element.html
Build info: version: '3.12.0', revision: '7c6e0b3', time: '2018-05-08T15:15:08.936Z'
System info: host: 'LENOVO', ip: '192.168.1.101', os.name: 'Windows 10', os.arch: 'amd64', os.version: '10.0', java.version: '1.8.0_171'
Driver info: org.openqa.selenium.ie.InternetExplorerDriver
Capabilities {acceptInsecureCerts: false, browserName: internet explorer, browserVersion: 11, javascriptEnabled: true, pageLoadStrategy: normal, platform: WINDOWS, platformName: WINDOWS, proxy: Proxy(), se:ieOptions: {browserAttachTimeout: 0, elementScrollBehavior: 0, enablePersistentHover: true, ie.browserCommandLineSwitches: , ie.ensureCleanSession: false, ie.fileUploadDialogTimeout: 3000, ie.forceCreateProcessApi: false, ignoreProtectedModeSettings: false, ignoreZoomSetting: false, initialBrowserUrl: http://localhost:39714/, nativeEvents: true, requireWindowFocus: false}, setWindowRect: true, timeouts: {implicit: 0, pageLoad: 300000, script: 30000}}
Session ID: af1a703a-0216-4c67-8c51-1292d13e399c
*** Element info: {Using=id, value=mod-login-username}
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.http.W3CHttpResponseCodec.createException(W3CHttpResponseCodec.java:187)
at org.openqa.selenium.remote.http.W3CHttpResponseCodec.decode(W3CHttpResponseCodec.java:122)
at org.openqa.selenium.remote.http.W3CHttpResponseCodec.decode(W3CHttpResponseCodec.java:49)
at org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:158)
at org.openqa.selenium.remote.service.DriverCommandExecutor.execute(DriverCommandExecutor.java:83)
at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:543)
at org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:317)
at org.openqa.selenium.remote.RemoteWebDriver.findElementById(RemoteWebDriver.java:363)
at org.openqa.selenium.By$ById.findElement(By.java:188)
at org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:309)
at pageObjects.Admin_Login.txtbx_Username(Admin_Login.java:13)
at testcases.testcase01.main(testcase01.java:29)
Here is the script:-
package pageObjects;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
public class Admin_Login {
private static WebElement element = null;
public static WebElement txtbx_Username(WebDriver driver) {
element = driver.findElement(By.id("mod-login-username"));
return element;
}
public static WebElement txtbx_Password (WebDriver driver) {
element = driver.findElement(By.xpath("mod-login-password"));
return element;
}
public static WebElement btn_Login (WebDriver driver) {
element = driver.findElement(By.id("mod-login-password"));
return element;
}
}
I'm not getting why the script showing the error of "Unable to find element with css selector ..." as I have only used id to find the element and not CSS selector. Could anyone please advise.
This error message...
Exception in thread "main" org.openqa.selenium.NoSuchElementException: Unable to find element with css selector == #mod\-login\-username
...implies that the InternetExplorerDriver was unable to locate any element as per the Locator Strategy you have used.
As you have mentioned the same code works using ChromeDirver/Chrome and GeckoDriver/Firefox, it is worth to mention that different Browser Engine renders the HTML DOM differently. So brittle Locator Strategies may not work across all the browsers.
As per your question, script showing the error of "Unable to find element with css selector ..." as I have only used id
it is again worth to mention as per WebDriver W3C Editor's Draft the preferred Locator Strategies enlisted are as follows :
"css selector"
: CSS selector"link text"
: Link text selector"partial link text"
: Partial link text selector"tag name"
: Tag name"xpath"
: XPath selectorSnapshot :
A change was propagated through the respective client specific bindings. For the Selenium-Java
clients here is the client code where internally the Locator Strategies based on id
, and name
are internally converted to equivalent css selector through a switchcase as follows :
switch (using) {
case "class name":
toReturn.put("using", "css selector");
toReturn.put("value", "." + cssEscape(value));
break;
case "id":
toReturn.put("using", "css selector");
toReturn.put("value", "#" + cssEscape(value));
break;
case "link text":
// Do nothing
break;
case "name":
toReturn.put("using", "css selector");
toReturn.put("value", "*[name='" + value + "']");
break;
case "partial link text":
// Do nothing
break;
case "tag name":
toReturn.put("using", "css selector");
toReturn.put("value", cssEscape(value));
break;
case "xpath":
// Do nothing
break;
}
return toReturn;
Snapshot :
Hence though you provide:
(By.id("mod-login-username"))
Error shows:
Unable to find element with css selector == #mod\-login\-username