org.openqa.selenium.NoSuchElementException ошибка в IE, но тот же код отлично работает в Chrome и Firefox - PullRequest
0 голосов
/ 10 июня 2018

Я написал скрипт входа в систему, и когда я выполняю его с помощью 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 Ответ

0 голосов
/ 11 июня 2018

Это сообщение об ошибке ...

Exception in thread "main" org.openqa.selenium.NoSuchElementException: Unable to find element with css selector == #mod\-login\-username 

... означает, что InternetExplorerDriver не удалось найти какой-либо элемент согласно стратегии локатора , которая у вас естьused.

Причина

Поскольку вы уже упоминали, что тот же код работает с использованием ChromeDirver / Chrome и GeckoDriver / Firefox, стоит отметить, что другой Browser Engine отображает HTML DOM по-разному.Таким образом, хрупкие стратегии локатора могут работать не во всех браузерах.


Что касается вашего вопроса, script showing the error of "Unable to find element with css selector ..." as I have only used id это еще раз стоит упомянуть в соответствии с черновиком WebDriver W3C Editor. предпочтительные стратегии локатора зачислены в список:

  • "css selector": селектор CSS
  • "link text": селектор текста ссылки
  • "partial link text": селектор текста частичной ссылки
  • "tag name": имя тега
  • "xpath": селектор XPath

Снимок:

Locator Strategies

Изменение распространеночерез соответствующие клиентские специальные привязки.Для 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;

Снимок:

JAVA_classname_id_name_tagname

Следовательно, вы предоставляете:

(By.id("mod-login-username"))

Ошибка показывает:

Unable to find element with css selector == #mod\-login\-username
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...