Mam stronę, która ma przycisk, aby pobrać informacje w formacie pliku CSV. Przycisk otwiera okno dialogowe Potwierdź, aby pobrać plik. Muszę przechowywać ten plik do tymczasowej lokalizacji (niezależnie od tego, czy jest to pamięć, czy zapisując się w rzeczywistym pliku, a następnie usuwanie go po), a następnie przeczytaj dane w CSV do tablicy.

Próbowałem kodu w tych pytań (pytanie 1, Question 2 , Pytanie 3 i Pytanie 4 ) i to nie jest to, czego potrzebuję - głównie dlatego, że nie pobierają CSV i korzystają z danych w nim.

Nie jestem pewien, czy potwierdzenie jest otwarte, ale dodałem ConfirmHandler zwracając true, aby spróbować pobrać plik. Jednak nie wiem, gdzie plik jest pobierany, jeśli w ogóle jest.

Oto, co mam się dzieje i gdzie się utknę:

Zaloguję się dobrze. Idę do generatora raportu. Wygeneruję raport, który otwiera się w nowym oknie. Nowe okno otwiera się dobrze i złapię go za pomocą WebWindowListener. Następnie szukam przycisku "Zapisz jako CSV" w nowym oknie. Mogę to znaleźć, a ja mogę go kliknąć, ale połączenie System.out.print pokazuje, że ConfirmHandler nie wystrzeliwuje.

for (DomElement e : newPage.getElementsByTagName("button")) {
    int i = 0;
    webClient.setConfirmHandler(new ConfirmHandler() {
        private static final long serialVersionUID = 1L;
        @Override
        public boolean handleConfirm(Page arg0, String arg1) {
            System.out.println("Test"); //isn't firing
            return false;
        }
    });
    if (((HtmlButton) e).getAttribute("onclick").contains("CSV")) {
        ((HtmlButton) e).click();
    }else {
        if (i++ == (newPage.getElementsByTagName("button").size() - 1)) throw new AssertionError("CSV button not found");
    }
}
0
Ethan Moore 6 październik 2020, 23:11

1 odpowiedź

Najlepsza odpowiedź

Inspiracja dla tej odpowiedzi pochodzą z Ta odpowiedź.

Naprawdę chciałem uzyskać informacje o CSV bez pobierania pliku, a więc i, wewnątrz metody {X0}} My {X1}}, tylko użyto arg0.getWebWindow().getEnclosingPage().getWebResponse().getContentAsString(), a następnie użyj String.split() a kilka razy, aby uzyskać informacje, które chciałem.

Oto, jak wygląda kod, więc jest trochę jaśniejszy:

webClient.addWebWindowListener(new WebWindowListener() {

    @Override
    public void webWindowContentChanged(WebWindowEvent arg0) {
        if (CSVclicked) {           //boolean that is set true when I click the download button...
            String CSV = arg0.getWebWindow().getEnclosedPage().getWebResponse().getContentAsString();

            //do things...

            CSVclicked = false; //don't use the same behavior next time the method is called...
        }
    }
});
0
Ethan Moore 11 październik 2020, 19:38