WebDriverException: возвращаемое значение не может быть преобразовано в WebElement: {} при использовании WebDriver с Safari 11 в Mac OS X - PullRequest
0 голосов
/ 25 июня 2018

У меня есть скрипт селенового веб-драйвера, который выполняет некоторые регрессионные тесты для моего тестируемого приложения. Скрипт отлично работает на Google Chrome, Firefox, IE и т. Д.

Однако недавно я попытался запустить его в Safari (11.1.1) в Mac OS X (10.13.5), и мой сценарий завершился ошибкой со странным сообщением, даже когда я вызываю простую строку, такую ​​как

driver.findElement(By.tagName("body"));

Исключение, которое я получаю, выглядит следующим образом:

org.openqa.selenium.WebDriverException: Returned value cannot be converted to WebElement: {}
Build info: version: '3.0.1', revision: '1969d75', time: '2016-10-18 09:49:13 -0700'
System info: host: 'Yethis-MacBook-Pro.local', ip: '192.168.2.197', os.name: 'Mac OS X', os.arch: 'x86_64', os.version: '10.13.5', java.version: '1.8.0_171'
Driver info: driver.version: RemoteWebDriver
    at org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:375)
    at org.openqa.selenium.remote.RemoteWebDriver.findElementByTagName(RemoteWebDriver.java:441)
    at org.openqa.selenium.By$ByTagName.findElement(By.java:334)
    at org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:360)
    at org.ycs.selenium.safari.App.execute(App.java:75)
    at org.ycs.selenium.safari.App.main(App.java:27)
Caused by: java.lang.ClassCastException: com.google.common.collect.Maps$TransformedEntriesMap cannot be cast to org.openqa.selenium.WebElement
    at org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:373)
    ... 5 more

Selenium Версия: 3.0.1 Версия Safari: 11.1.1 Версия Java: 1.8 Версия OS X: 10.13.5

Edit: Это моя зависимость, настроенная в Maven

<dependency>
    <groupId>org.seleniumhq.selenium</groupId>
    <artifactId>selenium-server</artifactId>
    <version>3.0.1</version>
</dependency>

Я много пытался найти эту проблему, но, к сожалению, ничего не появилось с информацией, специфичной для Mac.

Может кто-нибудь помочь мне решить эту проблему, пожалуйста?

Спасибо, Шрирам Шридхаран

1 Ответ

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

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

org.openqa.selenium.WebDriverException: Returned value cannot be converted to WebElement: {}

... подразумевает, что исключение WebDriverException было вызвано, когда JVM пыталась преобразовать возвращенное значение в WebElement .

Однако ваша главная проблема заключается в следующем:

java.lang.ClassCastException: com.google.common.collect.Maps$TransformedEntriesMap cannot be cast to org.openqa.selenium.WebElement

ClassCastException

ClassCastException выбрасывается, чтобы указать, что код попытался привести объект к подклассу, экземпляром которого он не является. Например, следующий код генерирует ClassCastException:

Object x = new Integer(0);
System.out.println((String)x);

Что пошло не так

В вашем случае использования неясно, зачем вам нужен тег <body>. Но согласно следующим обсуждениям:

Возможны три варианта этой ошибки:

  • Ваш скрипт / программа пытался получить доступ к тегу <body>, когда страница все еще загружалась, возможно, когда некоторые JavaScript / Ajax были еще активны.
  • Решение: вызвать WebDriverWait для WebElement , с которым вы хотите взаимодействовать, следующим образом:

    WebElement element = new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.id("elementID")));
    
  • Если вы хотите получить Источник страницы , используйте getPageSource() метод следующим образом:

    System.out.println(driver.getPageSource());
    
  • Если управление программой было в пределах <iframe> до попытки найти тег <body>, вернитесь к defaultContent следующим образом:

    driver.switchTo().defaultContent();
    

Примечание : в соответствии с лучшими практиками всегда обновляйте вашу среду тестирования с последними выпусками.

  • Обновите Selenium Client зависимость до 3.12.0 :

    • selenium-java

      <dependency>
          <groupId>org.seleniumhq.selenium</groupId>
          <artifactId>selenium-java</artifactId>
          <version>3.12.0</version>
      </dependency> 
      
    • selenium-server:

      <dependency>
          <groupId>org.seleniumhq.selenium</groupId>
          <artifactId>selenium-server</artifactId>
          <version>3.12.0</version>
      </dependency>
      
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...