【问题标题】:selenium.WebDriverException: Returned value cannot be converted to WebElementselenium.WebDriverException:返回值无法转换为 WebElement
【发布时间】:2019-10-02 18:22:47
【问题描述】:

尝试查找元素时出现以下错误。在这里,我想在找到 web 元素后填充文本。

我可以通过 chrome 控制台找到 xpath,我遇到了这个问题。关于这个问题有一些帖子,但是大多数都与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)

页面上有 3 个 iframe,正在访问的元素位于第一页

【问题讨论】:

  • 如果你写你想要的东西,你的代码,如果可能的话,html会更有帮助
  • 调用driver.switchTo().frame(0)时可能会发生错误。如果帧切换没有正确运行,驱动程序视图将处于错误的上下文中,因此下一个运行的driver.findElement 将遇到错误。如果您为尝试自动化的页面发布了一些 HTML,我们可以对其进行整理。
  • @Christine 添加了截图。
  • @kps 我添加了一个在这两个项目上调用 WebDriverWait 的解决方案。如果失败,您可以尝试在此处发布您尝试定位的 input 元素的 HTML。

标签: selenium selenium-webdriver salesforce-lightning


【解决方案1】:

在切换到 iframe 之前,我会尝试调用 WebDriverWait。

// 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")));

【讨论】:

  • 我在输入字段中添加了更好的图像 - 它在第一个 wait.until 步骤中失败并出现此错误 - org.openqa.selenium.TimeoutException:预期条件失败:等待帧可用:通过。 xpath: //iframe[@title='accessibility title'](尝试 10 秒,间隔 500 毫秒)在 org.openqa.selenium.support.ui.WebDriverWait.timeoutException(WebDriverWait.java:81) 在 org .openqa.selenium.support.ui.FluentWait.until(FluentWait.java:271)
  • @kps 有趣,查找 iframe 时出错。更新了我的 Xpath 以找到 iframe 以使用 name 而不是 title。让我们看看是否有帮助。
  • 虽然我在第一步等待之后看到调试。直到它跳过以下所有步骤,它没有输入任何文本,也没有点击任何按钮。对于以下代码:
  • wait.until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.xpath("//iframe[contains(@name, 'vfFrameId')]"))); WebElement element = wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//label[text()='升级原因']/following-sibling::div/input"))); element.sendKeys("jhghjkgfkgf"); WebElement element2 = wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//button[@title='Submit']"))); element2.click();
  • @kps 我不确定根本原因,除了 wait.until 因为找不到元素而引发异常。您可以检查页面源并查看是否driver.findElements(By.Xpath("//iframe")); 并计算网络元素,看看它是否返回任何内容。由于某种原因,代码没有找到看起来的 iframe。
猜你喜欢
  • 2018-11-01
  • 2019-06-15
  • 2020-02-08
  • 1970-01-01
  • 2015-09-08
  • 2016-08-16
  • 2018-12-03
  • 1970-01-01
相关资源
最近更新 更多