selenium.WebDriverException: возвращаемое значение не может быть преобразовано в WebElement - PullRequest
0 голосов
/ 02 октября 2019

Ошибка ниже при попытке найти элемент. Здесь я хочу заполнить текст после нахождения веб-элемента.

Я могу найти xpath через консоль Chrome, кое-как, как я получаю эту проблему. Есть несколько сообщений по этой проблеме, однако большинство из них связаны с appium, что для меня неактуально.

    util.driver.switchTo().defaultContent();
    util.driver.switchTo().frame(0);
    util.driver.findElement(By.xpath("//label[text()='Reason for Escalation']/following-sibling::div/input"));

Сообщение об ошибке:

org.openqa.selenium.WebDriverException: Returned value cannot be converted to WebElement: {error=no such element, message=no such element: Unable to locate element: {"method":"xpath","selector":"//label[text()='Reason for Escalation']/following-sibling::div/input"}

Driver info: driver.version: RemoteWebDriver
  at org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:324)
  at org.openqa.selenium.remote.RemoteWebDriver.findElementByXPath(RemoteWebDriver.java:419)
  at org.openqa.selenium.By$ByXPath.findElement(By.java:353)
  at org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:309)


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:322)
  at org.openqa.selenium.remote.RemoteWebDriver.findElementByXPath(RemoteWebDriver.java:419)
  at org.openqa.selenium.By$ByXPath.findElement(By.java:353)
  at org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:309)

enter image description here

На странице есть 3 фрейма, к которым я обращаюсь, на первой странице

1 Ответ

1 голос
/ 02 октября 2019

Я бы попытался вызвать WebDriverWait на iframe перед переключением на него.

// wait for iframe to exist, then switch to it

WebDriverWait wait = new WebDriverWait(util.driver, 10);
wait.until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.Xpath("//iframe[contains(@name, 'vfFrameId')]")));

// wait for element to exist

element = wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//label[text()='Reason for Escalation']/following-sibling::div/input")));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...