The report downloading process contains following steps, thus a template method or composite approach will be suitable to design a generic ReportDownload, let me design an interface first,
public interface Report{ }
public interface ReportDownload { void navigate(); void enterCriteria(ReportCriteria criteria); void triggering(); Clickable trigger(); Report findReport(); Report resolveExpection(Report actual) }
Report is a type, based on its file type, it can be a CSV, Excel or PDF document.
This is an article about how to save the downloaded file a certain folder, selenium forefox profile, with design, we can add a variable to hold the directory of the download files as per test base, so the findReport() method can look into that directory to find newly arrived file, in that way, you don't need to specify the download file name in the test. To test the result, a simple way is to use pre generation file as an expectation to compare the downloaded report. The expectation can be stored in a classpath directory which can be resolved by the file name of the actual report.
Once expectation and actual report are founded, we can compare two files to find out whether they are same, we can override the equals method to compare the content of the two files.
Report actual = page.findReport(); Report expected = page.resolveExpectation(); assertEquals(expected, actual)