【问题标题】:Read excel files with capybara or selenium使用水豚或硒读取 excel 文件
【发布时间】:2014-07-10 13:56:13
【问题描述】:

我正在测试一个您可以回答调查的应用程序。然后将调查结果输入到 Excel 文件中,然后调查管理员可以下载此文件并查看结果。我希望能够对此进行自动化测试。

我可以回复调查并下载文件没问题。但是,有没有办法可以打开下载的文件并阅读并验证它的内容?目前使用 rspec/capybara 进行测试,所以我想找到一个使用这些的解决方案,或者我可以降到 selenium 级别?

任何帮助都会很棒!

【问题讨论】:

  • 是的,你可以用 java 来做。您需要使用文件夹选项找到下载的文件。得到文件名后就可以读取文件了。
  • Selenium 仅适用于填写调查表。之后,它就脱离了 Selenium 的控制,因为 Selenium 所做的一切都是"automate browsers"。您必须找到一个 ruby​​ excel 库才能读取该文件。

标签: selenium rspec selenium-webdriver capybara


【解决方案1】:

首先你需要得到下载的文件名,你可以使用下面的代码(Java):

请导入这些文件:

import java.io.File;
import java.util.ArrayList;
import java.util.List;

File folder = new File(download_path);

    File[] listOfFilesBeforeDownload = folder.listFiles();
    for(File x: listOfFilesBeforeDownload){
        System.out.println("Files before download:"+x);

        }

//Download the file now

    File[] listOfFilesAfterDownload = folder.listFiles();

    for(File x: listOfFilesAfterDownload){
        String xx=x.toString();
        if(xx.contains(".crdownload")){

        }

    }

    listOfFilesAfterDownload = folder.listFiles();
    for(File x: listOfFilesAfterDownload){
        System.out.println("Files after download:"+x);

        }

    boolean contains = false;    
    List<String> results = new ArrayList<String>();
    for(int m=0; m<listOfFilesAfterDownload.length; m++) {

        for(int n=0; n<listOfFilesBeforeDownload.length; n++) {


            String afterFileName=listOfFilesAfterDownload[m].getName();
            String beforeFileName=listOfFilesBeforeDownload[n].getName();
            if(afterFileName.equals(beforeFileName)) {

                contains = true;
                break;
            }
        }
        if(!contains) {
        filename=listOfFilesAfterDownload[m].getName();
            results.add(filename);

        }
        else{
            //System.out.println(" contains = false");
            contains = false;
        }           
    }        
    System.out.println(results);
    }
    catch (NoSuchElementException e){
        System.err.println(e);
    }

    System.out.println("filename : "+filename);

获取文件名后,您可以从文件中提取内容。像这样的,

           FileInputStream fis = new FileInputStream(download+fname+"");
           // POIFSFileSystem fileSystem = new POIFSFileSystem(fis); 


            org.apache.poi.xwpf.extractor.XWPFWordExtractor oleTextExtractor 
= new XWPFWordExtractor(new XWPFDocument(fis));
            String content=oleTextExtractor.getText();

【讨论】:

  • 原发帖人没有提到的一件事:水豚是红宝石。您的代码无论多么正确,都可能对 OP 没有用处。
  • 大家好 - 感谢您的回复。是的,应该提到 caypbara 是红宝石,但我想用上面的 java 示例来寻找一种方法。
猜你喜欢
  • 1970-01-01
  • 2011-08-03
  • 2012-07-06
  • 1970-01-01
  • 2013-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-19
相关资源
最近更新 更多