簡體   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