org.openqa.selenium.NoSuchElementException ошибка в IE, но тот же код отлично работает в Chrome и Firefox
Я написал скрипт входа в систему, и когда я выполняю его с помощью ChromeDirver и FFDriver, он работает нормально. Но когда я запускаю то же самое с помощью IE Driver, он не работает и выдает ошибку ниже.
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)
Вот сценарий:
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;
}
}
Я не понимаю, почему скрипт показывает ошибку "Невозможно найти элемент с помощью селектора CSS...", так как я использовал только идентификатор, чтобы найти элемент, а не селектор CSS. Может кто-нибудь, пожалуйста, посоветуйте.
1 ответ
Это сообщение об ошибке...
Exception in thread "main" org.openqa.selenium.NoSuchElementException: Unable to find element with css selector == #mod\-login\-username
... подразумевает, что InternetExplorerDriver не смог найти какой-либо элемент в соответствии со стратегией локатора, которую вы использовали.
причина
Поскольку вы упомянули, что один и тот же код работает с использованием ChromeDirver/Chrome и GeckoDriver/Firefox, стоит упомянуть, что другой движок браузера по- разному отображает HTML DOM. Таким образом, хрупкие стратегии Locator могут работать не во всех браузерах.
По вашему вопросу script showing the error of "Unable to find element with css selector ..." as I have only used id
Опять же, стоит упомянуть в соответствии с черновиком WebDriver W3C Editor, в котором перечислены следующие предпочтительные стратегии Locator:
"css selector"
: CSS селектор"link text"
: Селектор текста ссылки"partial link text"
: Селектор текста частичной ссылки"tag name"
: Название тэга"xpath"
: XPath селектор
Снимок:
Изменение было распространено через соответствующие привязки клиента. Для Selenium-Java
клиенты здесь код клиента, где внутренне стратегии локатора основаны на id
, а также name
внутренне преобразованы в эквивалентный css-селектор через коммутатор следующим образом:
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;
Снимок:
Следовательно, хотя вы предоставляете:
(By.id("mod-login-username"))
Ошибка показывает:
Unable to find element with css selector == #mod\-login\-username