我正在尝试使用Selenium获取WebElement:
driver.findElement(By.xpath("//input[@name='j_username']"))
但Selenium说:"无法使用XPath找到元素......"。 XPath是有效的,我用FirePath证明了它。 但是input元素具有以下无效代码:
<input size="10" type="text" name="j_username" maxlength="8">
我无法更改html文件,尽管有任何解决方案可以获取webElement吗? 提前谢谢!
答案 0 :(得分:1)
尝试使用css选择器选择元素。并在firepath中验证(firebug插件元素位置正确)。 所以你的css选择器就像是
input[name='j_username']
第二种方法是使用内部firebug机制来查找元素的xPath。
见下面的屏幕
在这些操作之后,驱动程序应该正确处理元素。
答案 1 :(得分:0)
好吧,我建议在你的HTML代码中添加一个id -
<input id="j_username"size="10" type="text" name="j_username" maxlength="8">
和id -
的findElementdriver.findElement(By.id("j_username"));
我遇到过与xpath类似的问题(borwser问题??)但我的ID永远不会失败。 ;)
顺便说一下,我觉得你的代码应该是 -
driver.findElement(By.xpath(".//*[@name='j_username']"));
答案 2 :(得分:0)
最好的解决方案是找出哪些硒做错了,但没有一个URL或样本页面来测试它有点困难。无论如何你可以将HTML转储到jsfiddle吗?如果有这样做并将网址粘贴到问题中,我确信有人可以找到解决方案。
如果没有,另一种获得结果的方法是使用jQuery。如果firebug正在捡起它而不是硒,那么jQuery就没有理由不接受它。如果需要,这是如何做到这一点:
第1步:页面上是否已存在jQuery?如果是这样,那么您不需要这样做,否则您需要使用脚本does something like this中的driver.executeScript(addjQueryScript)
自行添加。
第2步:调用WebElement input = driver.executeScript(elementSelector);
,其中elementSelector脚本类似于\"return $('input[name=\"j_username\"]')\");
我的jQuery不太好,但我相信这应该有用......
祝你好运!