繁体   English   中英

为什么此Javascript在浏览器控制台中有效,但在Selenium的JavascriptExecutor中却无效?

[英]Why does this Javascript work in the browser console but not in Selenium's JavascriptExecutor?

因此,我一直在Selenium代码中使用JavascriptExecutor类,因为Javascript似乎比Selenium更优雅地处理DOM操作。 我使用XPath定位元素,而Javascript处理XPath的方式就是以下代码行(请注意,“ xpath”是将包含所需XPath字符串的变量):

document.evaluate(xpath, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;

除了一种情况,这在所有XPath的JavascriptExecutor中都运行良好:

WebDriver driver = new ChromeDriver();
driver.get("example.com");
JavascriptExecutor js = (JavascriptExecutor) driver;
String xpath = "(//div[@class='aclass']//a)[2]";
String javascript = "return document.evaluate(arguments[0], document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue";
WebElement element = js.executeScript(javascript, xpath);
element.click();

上面使用的xpath在浏览器控制台中有效,而在JavascriptExecutor中则无效。 注意“ [2]”。 如果索引值为“ [1]”,则在JavascriptExecutor中工作; 但任何大于该值的值均不起作用(例如“ [2]”,“ [3]”,“ [4]”,“ [5]”等)。 在浏览器控制台中,这些工作正常。

所以我的问题是: “为什么这段明显不在浏览器控制台中工作的Javascript代码却在JavascriptExecutor中工作?”

我的DOM场景是我有6个<a>元素,它们具有相同的父元素<div class='aclass'> Javascript在浏览器控制台中正确返回6个元素中的每个元素,并使用XPath "(//div[@class='aclass']//a)[index]" ,但是只有第一个元素正确返回JavascriptExecutor,而其他返回null。

因此,问题在于我没有在执行第一个JavascriptExecutor后实例化它。 除非实例化一个新实例,否则随后每次对JavascriptExecutor的使用都会失败。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM