我已经在下面编写了检查列表Web元素的代码,但是下面的代码正在运行但是只有第一项它没有循环到循环结束.
List <WebElement> listofItems = wd.findElements(By.xpath("//*[starts-with(@id,'result_')]//div//div[1]//div//a//img")); for (int i=1; i<=listofItems.size(); i++) { listofItems.get(i).click(); wd.manage().timeouts().implicitlyWait(30,TimeUnit.SECONDS); System.out.println(i); System.out.println("pass"); wd.navigate().back(); }
解决方法
@Saifur很好地解释了这个问题.所以,我将把代码提供给你
List <WebElement> listofItems = wd.findElements(By.xpath("//*[starts-with(@id,'result_')]//div//div[1]//div//a//img")); webdriverwait wait = new webdriverwait(wd,20); //Wait time of 20 seconds for (int i=1; i<=listofItems.size(); i++) { /*Getting the list of items again so that when the page is navigated back to,then the list of items will be refreshed again */ listofItems = wd.findElements(By.xpath("//*[starts-with(@id,'result_')]//div//div[1]//div//a//img")); //Waiting for the element to be visible //Used (i-1) because the list's item start with 0th index,like in an array wait.until(ExpectedConditions.visibilityOf(listofItems.get(i-1))); //Clicking on the first element listofItems.get(i-1).click(); wd.manage().timeouts().implicitlyWait(30,TimeUnit.SECONDS); System.out.print(i + " element clicked\t--"); System.out.println("pass"); wd.navigate().back(); }