Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用Selenium选择无效的html标记_Java_Selenium_Selenium Webdriver - Fatal编程技术网

Java 使用Selenium选择无效的html标记

Java 使用Selenium选择无效的html标记,java,selenium,selenium-webdriver,Java,Selenium,Selenium Webdriver,我正在尝试使用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文件,尽管有任

我正在尝试使用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吗?
提前谢谢

尝试使用css选择器选择元素。并在firepath(firebug插件)中验证元素是否正确定位。 所以你的css选择器应该是

input[name='j_username']
第二种方法是使用内部firebug机制来查找元素的XPath。 请参阅下面所附的屏幕


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

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

<input id="j_username"size="10" type="text" name="j_username" maxlength="8">
我在xpath方面也遇到过类似的问题(borwser问题??),但id对我来说从未失败过

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

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

最好的解决方案是找出selenium做错了什么,但如果没有URL或示例页面进行测试,这有点困难。您是否可以将HTML转储到一个文件中?如果有人这样做,并粘贴到问题的网址,我相信有人可以找到一个解决办法

但是,如果不是这样,另一种获得结果的方法是使用jQuery。如果firebug正在获取它,但不是selenium,那么jQuery没有理由不获取它。如果需要的话,这里有一些方法:

步骤1:页面上是否已经存在jQuery?如果是这样,则不需要执行此位,否则需要使用
driver.executeScript(addjQueryScript)
在脚本所在位置添加它

第2步:调用
WebElement input=driver.executeScript(elementSelector)其中elementSelector脚本类似于
\“return$('input[name=\'j\u username\'”)\”

我的jQuery不是很好,但我相信它应该可以工作


祝你好运

如果您在Firebug中执行XPath查询(通过进入控制台,键入
$x(“//input[@name='j_username'])
),它会找到什么吗?元素是否在弹出窗口或iframe中?开始时它在页面上是可见的还是某些操作导致它可见?如果我执行查询,控制台将响应:[input]。元素不在弹出窗口或iframe中。它一直可见。不,它不工作。我尝试了带有绝对路径的变体和带有css选择器的版本。FirePath和FireBug获取元素,但是selenium抛出了每个异常,它无法找到元素。我的问题之一是,我无法更改站点的HTML代码。我尝试了您的版本,但结果是一样的:XPath和Firebug没有问题,但是Selenium没有找到元素。同时,我认为硒没有解决方案:(谢谢你的帮助!
driver.findElement(By.xpath(".//*[@name='j_username']"));