尝试使用.visibilityOfAllElementsLocatedBy
等待元素,并将其收集在列表中。
<table>
<tr id="tr1">
<td id="td1">1</td>
<td id="td2">2</td>
<td id="td3">3</td>
<td id="td4">4</td>
<td id="td5">5</td>
<td id="td6">6</td>
<td id="td7">7</td>
<td id="td8">8</td>
<td id="td9">9</td>
<td id="td10">10</td>
</tr>
<tr id="tr2">
<td id="td1">11</td>
<td id="td2">22</td>
</tr>
</table>
我正在使用',检索'tr1'元素,>
WebDriverWait wait = new WebDriverWait(driver, 5); tableHeaderRow = wait.until(ExpectedConditions.presenceOfElementLocated(By.id("tr1")));
然后,我得到'td'列表并遍历td元素。
List<WebElement> headersList = tableHeaderRow.findElements(By.tagName("td")); System.out.println("Size :" + headersList.size()); //10
列表大小为10。
headersList.forEach(td -> System.out.println(td.getTagName()));
但是当我遍历列表时,遍历4或5个元素后会得到StaleElementReferenceException。
org.openqa.selenium.StaleElementReferenceException: stale element reference: element is not attached to the page document.
问题是,即使加载了'tr1',当迭代发生时,tds也不会完全加载。等待只是检查提到的父元素(tr1)的加载。
是否有适当的方法来处理此问题。等待直到父元素和所有子元素都被加载。
1 | 2 | 3 | 4 |
使用此xpath://tr[@id='tr1']//td
。
尝试使用.visibilityOfAllElementsLocatedBy
等待元素,并将其收集在列表中。
要确保同时加载parent