Добрый день!
У меня задача проверить скачанный файл. Проблема в том, что это не просто ссылка на скачивание файла, мы получаем его с бека. При нажатии на кнопку скачивания делается запрос в API, после получения ответа, контент файла записывается в сам файл и скачивается.
Подскажите, как мне его отловить? Буду благодарна любым идеям)
java.io.FileNotFoundException: Failed to download file {By.xpath: //*[@type=‘submit’ or @class=‘submit-button’]} in 20000 ms.
at com.codeborne.selenide.impl.Downloads.firstDownloadedFile(Downloads.java:75)
at com.codeborne.selenide.impl.DownloadFileWithProxyServer.clickAndInterceptFileByProxyServer(DownloadFileWithProxyServer.java:78)
at com.codeborne.selenide.impl.DownloadFileWithProxyServer.lambda$download$0(DownloadFileWithProxyServer.java:43)
at com.codeborne.selenide.impl.WindowsCloser.runAndCloseArisedWindows(WindowsCloser.java:25)
at com.codeborne.selenide.impl.DownloadFileWithProxyServer.download(DownloadFileWithProxyServer.java:42)
at com.codeborne.selenide.commands.DownloadFile.execute(DownloadFile.java:57)
at com.codeborne.selenide.commands.DownloadFile.execute(DownloadFile.java:23)
at com.codeborne.selenide.commands.Commands.execute(Commands.java:152)
at com.codeborne.selenide.impl.SelenideElementProxy.dispatchAndRetry(SelenideElementProxy.java:104)
at com.codeborne.selenide.impl.SelenideElementProxy.invoke(SelenideElementProxy.java:70)
at com.sun.proxy.$Proxy92.download(Unknown Source)
Ой-ой, если в проекте возникает ощущение, что кто-то что-то боится менять, то проекту хана. В хорошем проекте кто угодно может в любой момент поменять что угодно. Возможно, через пулреквест или кодревью, но это должно быть безболезненно.
java.io.FileNotFoundException: Failed to download file {By.xpath: //*[@type=‘submit’ or @class=‘submit-button’]} in 50000 ms.
at com.codeborne.selenide.impl.Downloads.firstDownloadedFile(Downloads.java:75)
at com.codeborne.selenide.impl.DownloadFileWithProxyServer.clickAndInterceptFileByProxyServer(DownloadFileWithProxyServer.java:78)
at com.codeborne.selenide.impl.DownloadFileWithProxyServer.lambda$download$0(DownloadFileWithProxyServer.java:43)
at com.codeborne.selenide.impl.WindowsCloser.runAndCloseArisedWindows(WindowsCloser.java:25)
at com.codeborne.selenide.impl.DownloadFileWithProxyServer.download(DownloadFileWithProxyServer.java:42)
at com.codeborne.selenide.commands.DownloadFile.execute(DownloadFile.java:57)
В setWebDriver я передаю прокси в качестве второго параметра
Если сделать вызов WebDriverRunner.getSelenideProxy() то возвращается корректный прокси.
Фактически, в capabilities тоже лежит прокси (capabilities.setCapability(CapabilityType.PROXY, proxy)) т.е. прокси известен.
Вся работа с селенидом сделана как надстройка над инициализацией драйверов для селениума. Для работы с файлами в селениуме мы использовали прокси, но в данном конкретном случае это не получается сделать, т.к. при скачивании, Content-Type: application/json и прокси “слушает” большинство лишних запросов.
Ощущение, что селенид тоже пропускает нужный нам запрос. А где происходит та самая “утечка” я не вижу
Ох, всё сложно… Ну ладно, тогда вроде должно работать.
Селенидовский метод $.download() должен вывести в лог все респонсы, которые он вообще получил. У вас в логах они видны? Среди них есть нужный?
Чтобы помочь прокси отыскать нужный среди запрос среди кучи левых, стоит вызывать метод download с параметром: File f = download(withName("hello_world.txt")). См. примеры.
Нет, не к локалхосту.
Почему создаётся ChromeDriver. В зависимости от режима запуска тестов, добавляются настройки в capabilities. И создаётся ChromeDriver/Firefox/RemoteWebDriver и тд…
Боюсь сказать, что это уже так сложилось(задолго До) и на это сверху я пытаюсь навешать Селенид. Все шло хорошо, пока не появилась задача по проверке скачанного инвойса.