Щелкните правой кнопкой мыши ссылку Сохранить как - PullRequest
0 голосов
/ 24 июня 2019

Используя Java и Selenium, я пытаюсь получить эту ссылку: enter image description here

Итак, из того, что я нашел, сначала я делаю

Actions action = new Actions(driver);
scrollToElement(href);
action.contextClick(href).perform()

который вызывает меню, как и должно быть.Но тогда я делаю

action.sendKeys(Keys.ARROW_DOWN).sendKeys(Keys.ARROW_DOWN).sendKeys(Keys.ARROW_DOWN).sendKeys(Keys.ARROW_DOWN).build().perform();
try {
    Thread.sleep(5000);
} catch (InterruptedException e) {

}
action.sendKeys(Keys.RETURN).build().perform();  

Тем не менее, это похоже на стрелку вниз за пределами контекстного меню.Это ссылка в формате PDF, поэтому вместо выбора «Сохранить ссылку как» он нажимает стрелку вниз за пределами контекстного меню, поэтому закрывает контекстное меню и просто щелкает левой кнопкой мыши на pdf href.

Поэтому мне интересно как-нибудь заставить его переместить стрелку вниз, пока он находится в контекстном окне.Или есть xpath для "Сохранить ссылку как ..."?Я не могу проверить это.Я полагаю, я мог бы попробовать

//*[contains(text(), 'Save link as"')]

, но не уверен, что это будет работать или нет?У кого-нибудь была такая ситуация?

1 Ответ

0 голосов
/ 25 июня 2019

Вы смотрите в неверном направлении, вам не следует автоматизировать загрузку файлов, поскольку вы не тестируете свое приложение, вы тестируете браузер, и я ожидаю, что это не то, что вы должны делать.

Более того, когда вы запускаете тест удаленно, то есть в Selenium Grid или локально в параллельном режиме , вы столкнетесь с проблемами, так как браузер, который в данный момент не в фокусе, будетотправить ключевые события в приложение, которое находится в фокусе.

Лучшим вариантом является извлечение значения атрибута href и загрузка с использованием библиотеки OkHttp , которая находится под капотом Selenium Java Client .Соответствующий код будет выглядеть примерно так:

OkHttpClient client = new OkHttpClient().newBuilder().build();

Request request = new Request.Builder().url(href.getAttribute("href")).build();
Response response = client.newCall(request).execute();

File downloadedLogo = new File("myfile.pdf");
BufferedSink sink = Okio.buffer(Okio.sink(downloadedLogo));
sink.writeAll(Objects.requireNonNull(response.body()).source());
sink.close();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...