誰能解釋一下為什么data.size()會出現 13 以及為什么data1.size()會出現 364?
根據我的理解,data.size()應該是 0,因為<td>它不是一個有效的 xpath 運算式,data1.size()應該是 13,因為在沉淀元素內部/下面有 13 個<td>標簽。364 實際上是特定網頁中“td”標簽的總數。
System.setProperty("webdriver.chrome.driver", "C:\\Program Files\\Java\\chromedriver.exe");
WebDriver driver = new ChromeDriver();
driver.manage().window().maximize();
driver.get("https://en.wikipedia.org/wiki/York");
Actions a = new Actions(driver);
WebElement precipitation = driver.findElement(By.xpath("//a[@title='Precipitation']//ancestor::tr"));
a.moveToElement(precipitation).build().perform();
List<WebElement> data = precipitation.findElements(By.xpath("td"));
List<WebElement> data1 = precipitation.findElements(By.xpath("//td"));
List<WebElement> data2 = precipitation.findElements(By.tagName("td"));
List<WebElement> data3 = precipitation.findElements(By.cssSelector("td"));
List<WebElement> data4 = driver.findElements(By.cssSelector("td"));
List<WebElement> data5 = driver.findElements(By.xpath("td"));
List<WebElement> data6 = driver.findElements(By.xpath("abcxyz"));
System.out.println("data = " data.size());
System.out.println("data1 = " data1.size());
System.out.println("data2 = " data2.size());
System.out.println("data3 = " data3.size());
System.out.println("data4 = " data4.size());
System.out.println("data5 = " data5.size());
System.out.println("data6 = " data6.size());
driver.close();
uj5u.com熱心網友回復:
實際上"td"是一個有效的運算式,它選擇具有 node name 的節點td,并且由于您沒有使用/或//搜索沒有從 DOM 層次結構中的更高元素開始。這意味著
precipitation.findElements(By.xpath("td"));
相當于
driver.findElement(By.xpath("//a[@title='Precipitation']//ancestor::tr/td"));
//將定位 DOM 中的所有匹配元素,即所有<td>節點。如果要precipitation用作根節點并從那里開始搜索,則需要.為當前背景關系添加
precipitation.findElements(By.xpath(".//td"));
對于 , 下的所有<td>s<tr>或
precipitation.findElements(By.xpath("./td"));
對于直系子女<tr>
請參閱XPath 語法以供參考。
uj5u.com熱心網友回復:
選擇節點
XPath 使用路徑運算式來選擇 XML 檔案中的節點。通過以下語意選擇節點:

因此,根據上面的討論,一旦您確定了 webElement沉淀
WebElement precipitation = driver.findElement(By.xpath("//a[@title='Precipitation']//ancestor::tr"));
next 獲取后代<td>標簽,而不是:
List<WebElement> data = precipitation.findElements(By.xpath("td"));
根據上面的討論,要以<td>最有效的方式識別所需的后代元素,您需要附加/字符以表示您將從哪個節點開始搜索。
如此有效,您的代碼行將是:
List<WebElement> data = precipitation.findElements(By.xpath(".//td"));
在一行中:
List<WebElement> data = precipitation.findElements(By.xpath("//a[@title='Precipitation']//ancestor::tr//td"));
這將為您選擇正確的13個所需<td>節點。

轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/457817.html
下一篇:從下拉串列中下載所有檔案的腳本
