0

我有 10 个项目的列表大小和一个具有 2 次迭代的 for 循环,因此在第一次迭代中 selenium 捕获所有 10 个项目的屏幕截图,但在第二次迭代中,我不会覆盖第一次迭代中捕获的所有 10 个屏幕截图或它没有为接下来的 10 个项目捕获任何屏幕截图,它在第一次迭代中有 10 个项目,然后在第二次它总共有 20 个,所以应该有 20 个屏幕截图,但我只得到 10 个,下面是代码片段,如果任何人都可以帮助或建议我做错的事情-:

for(int i=1; i<=sheet.getLastRowNum(); i++) {   

if(SearchKey.equals(result.getText()))
     {        
        System.out.println("Search is pass!");
        Thread.sleep(3000);
        WebElement link = wait.until(ExpectedConditions.elementToBeClickable(By.className("search-result__result-link")));
        link.click();
        driver.manage().timeouts().implicitlyWait(90, TimeUnit.SECONDS);
        Thread.sleep(3000);
        WebElement next = driver.findElement(By.partialLinkText("employees on LinkedIn"));
        next.click();
        Thread.sleep(3000);
        List<WebElement> list= driver.findElements(By.cssSelector(".search-results__list > li"));
        System.out.println("Total number items :"+list.size());
        
        //Scroll and capture screenshot
        for(j= 1; j<=list.size(); j++)
        {
            WebElement elements= driver.findElement(By.cssSelector(".search-results__list > li"));    
            
            //Get entire page screenshot
            File screenshots = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
            BufferedImage  fullImg = ImageIO.read(screenshots);
            
            // Get the location of element on the page
            Point point = Decision_Maker.getLocation();
            
            //Get width and height of the element
            int eleWidth =  Decision_Maker.getSize().getWidth();
            int eleHeight = Decision_Maker.getSize().getHeight();
            
            //Crop the entire page screenshot to get only element screenshot
            BufferedImage eleScreenshot= fullImg.getSubimage(point.getX(), point.getY(),
                eleWidth, eleHeight);
            String location = "E:\\Screenshots\\";              
            Thread.sleep(3000);
            
            //Scroll when element gets hide
            JavascriptExecutor js = (JavascriptExecutor) driver;
            js.executeScript("arguments[0].scrollIntoView();", elements);  
            Thread.sleep(3000);         
            
            FileUtils.copyFile(screenshots, new File (location + "img" + j+ ".jpg"));
        }
        int sum = sum + list.size();
        System.out.println("Total number of items available"+sum);
    }   
    
    else {
      System.out.println("Search is fail");
    }
    searchlist.clear();
}
4

1 回答 1

0

您的外循环声明i并且您的内循环也使用i,但它使用与i外循环相同的内容。这是一个非常棘手的逻辑,可能会导致很多意想不到的结果。

因此,除非您确定您使用的是正确的逻辑,否则我建议您修复循环以使用不同的变量并使用这两个变量构建屏幕截图名称,以便它们是唯一的。喜欢:

for(int i=...){
  for(int j=...){
     FileUtils.copyFile(screenshots, new File (location + "img" + i + "-" + j + ".jpg"));
  }
}
于 2020-07-23T12:32:58.907 回答