无法单击通过selenium保存在List中的第二个链接

时间:2018-06-14 10:19:43

标签: selenium selenium-webdriver automation

我试图逐一点击保存在此[网站] [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

2 个答案:

答案 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++;
    }