【问题标题】:Select invalid html-tag with Selenium使用 Selenium 选择无效的 html 标记
【发布时间】:2012-10-05 21:40:33
【问题描述】:

我正在尝试使用 Selenium 获取 WebElement:

driver.findElement(By.xpath("//input[@name='j_username']"))

但是 Selenium 说:“无法使用 XPath 找到元素......”。 XPath 是有效的,我用 FirePath 对其进行了验证。 但是输入元素有以下无效代码:

<input size="10" type="text" name="j_username" maxlength="8">

我无法更改 html 文件,尽管事实上是否有任何解决方案可以获取 webElement? 提前致谢!

【问题讨论】:

  • 如果您在 Firebug 中执行 XPath 查询(通过进入控制台,输入 $x("//input[@name='j_username']")),它会找到任何东西吗?该元素是在弹出窗口还是 iframe 中?它是否一开始就在页面上可见,还是某些操作导致它变得可见?
  • 如果我执行查询,控制台会响应:[输入]。该元素不在弹出窗口或 iframe 中。它始终可见。

标签: java selenium selenium-webdriver


【解决方案1】:

尝试使用 css 选择器选择元素。并在firepath中验证(firebug插件该元素位置正确)。 所以你的css选择器类似于

input[name='j_username']

第二种方法是使用内部 firebug 机制来查找元素的 xPath。 请参阅下面的屏幕

在这些操作之后,驱动程序应该正确处理元素。

【讨论】:

  • 不,它不起作用。我尝试了带有绝对路径的变体和带有 css-selector 的版本。 FirePath 和 FireBug 获取元素,但 selenium 抛出每个异常,即找不到元素。
【解决方案2】:

我建议在你的 html 代码中添加一个 id -

<input id="j_username"size="10" type="text" name="j_username" maxlength="8">

并通过 id 查找元素 -

driver.findElement(By.id("j_username"));

我遇到过类似的 xpath 问题(borwser 问题??),但 id 对我来说从来没有失败过。 ;)

顺便说一下,我觉得你的代码应该是 -

driver.findElement(By.xpath(".//*[@name='j_username']"));

【讨论】:

  • 我的一个问题是,我无法更改网站的 HTML 代码。我试过你的版本,但结果是一样的:用 XPath 和 Firebug 没问题,但是 Selenium 找不到元素。同时我认为 Selenium 没有解决方案 :( 感谢您的帮助!
【解决方案3】:

最好的解决方案是找出 selenium 做错了什么,但是没有 URL 或示例页面来测试它有点困难。无论如何,您可以将 HTML 转储到jsfiddle 中吗?如果有这样做并将网址粘贴到问题中,我相信有人可以找到解决方案。

如果不是,另一种获得结果的方法是使用 jQuery。如果萤火虫正在拾取它而不是硒,那么 jQuery 没有理由不得到它。如果需要,以下是执行此操作的方法:

第 1 步: 页面上是否已经存在 jQuery?如果是这样,那么您不需要执行此操作,否则您需要使用 driver.executeScript(addjQueryScript) 自己添加它,其中脚本 does something like this

第 2 步: 调用 WebElement input = driver.executeScript(elementSelector);,其中 elementSelector 脚本类似于 \"return $('input[name=\"j_username\"]')\");

我的 jQuery 不太好,但我相信应该可以...

祝你好运!

【讨论】:

    猜你喜欢
    • 2020-05-22
    • 2021-02-11
    • 1970-01-01
    • 1970-01-01
    • 2015-07-05
    • 2015-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多