我试图逐一点击保存在此[网站] [1]的列表中的所有产品链接。第一个产品链接被点击,但是当我在点击第一个链接后尝试导航回来时,第二个链接没有被点击并且出现错误" Stalemate Reference exception"。我无法获得任何其他技巧来获取所有链接并逐个点击它们。有没有其他方法可以做到这一点,因为我的链接正在更新,驱动程序无法在页面刷新后找到链接。我很震惊:elementToBeClicked.click();.这是我的代码:
WebElement prodList = util.getdriver().findElement(By.id("atg_store_prodList"));
// Finding all links and saving in a list
List<WebElement> alllinks = prodList.findElements(By.xpath(".//div[@class='product-name']/a"));
System.out.println(alllinks);
for (int i = 0; i < alllinks.size(); i++) {
System.out.println(alllinks.get(i));
WebElement elementToBeClicked = alllinks.get(i);
Thread.sleep(25000);
elementToBeClicked.click();
Thread.sleep(10000);
util.clickbyXpath(Constants.BOOTSIZE);
Thread.sleep(10000);
util.getdriver().findElement(By.id("atg_behavior_addItemToCart")).click();
// util.getdriver().switchTo().alert().dismiss();
if (util.getdriver().findElement(By.xpath("//a[contains(text(),'Continue Shopping')]"))
.isDisplayed()) {
util.getdriver().findElement(By.xpath("//a[contains(text(),'Continue Shopping')]"))
.click();
util.getdriver().navigate().back();
}
else {
util.getdriver().findElement(By.xpath("//a[@title='Checkout']")).click();
Select selectCountry = new Select(
}
}
[1]: https://www.barneys.com/category/women/shoes/boots/N-po186i
答案 0 :(得分:0)
当你回去时,列表中的所有元素都会变得陈旧。要解决它,您需要在循环开始时再次查找所有元素。请在for循环的开头添加以下代码,如下所示。
for (int i = 0; i < alllinks.size(); i++) {
alllinks = prodList.findElements(By.xpath(".//div[@class='product-name']/a"));// this will re identify all elements after going back.
System.out.println(alllinks.get(i));
WebElement elementToBeClicked = alllinks.get(i);
答案 1 :(得分:0)
如果您在#include <stdio.h>
void main()
{
int sum = 0;
for(i=0;i<=3;i++)
{
sum = sum +i;
}
printf("%d\n",sum);
}
获取陈旧元素引用,请将此Web元素包装在此代码中。
你可以尝试的代码:
elementToBeClicked.click();
更新:是的,它正在我的工作。试试这段代码:
boolean result = false;
int attempts = 0;
while(attempts < 2) {
try {
elementToBeClicked.click(); // or web element that is causing stale ref.
result = true;
break;
} catch(StaleElementException e) {
}
attempts++;
}