Я видел, что у многих людей проблемы с загрузкой файла в тестовой среде с помощью Selenium WebDriver. Я использую селен WebDriver и java и имею ту же проблему. Я наконец нашел решение, поэтому я опубликую его здесь, надеясь, что он поможет кому-то другому.Одно решение для загрузки файлов с использованием Java Robot API с Selenium WebDriver по Java
Когда мне нужно загрузить файл в тесте, я нажимаю кнопку «Webdriver» в кнопке и жду, пока откроется окно «Открыть». Затем я копирую путь к файлу в буфер обмена, а затем вставляю его в «открытое» окно и нажимаю «Enter». Это работает, потому что, когда открывается окно «open», фокус всегда находится в «открытой» кнопке.
Вам понадобятся эти классы и метод:
import java.awt.Robot;
import java.awt.event.KeyEvent;
import java.awt.Toolkit;
import java.awt.datatransfer.StringSelection;
public static void setClipboardData(String string) {
StringSelection stringSelection = new StringSelection(string);
Toolkit.getDefaultToolkit().getSystemClipboard().setContents(stringSelection, null);
}
И это то, что я делаю, только после открытия «открытое» окно:
setClipboardData("C:\\path to file\\example.jpg");
//native key strokes for CTRL, V and ENTER keys
Robot robot = new Robot();
robot.keyPress(KeyEvent.VK_CONTROL);
robot.keyPress(KeyEvent.VK_V);
robot.keyRelease(KeyEvent.VK_V);
robot.keyRelease(KeyEvent.VK_CONTROL);
robot.keyPress(KeyEvent.VK_ENTER);
robot.keyRelease(KeyEvent.VK_ENTER);
И Вот именно. Он работает для меня, я надеюсь, что это сработает для некоторых из вас.
Спасибо, проблема в том, что «sendKeys» не работает для меня, потому что я загружаю файл через вызов ajax перед отправкой формы. Но, возможно, это помогает другим. :) – Alex
Но. Он просто заполняет путь, любые вызовы ajax __ должны быть разрешены после того, как '' теряет фокус (это означает, что после вызова 'sendkeys()' вам нужно щелкнуть за пределами '' или начать заполнять какой-то другой для' onchange' для запуска). –
Да, вы правы, но файловая загрузка, которую я использую, использует поддельное поле ввода, в котором отображается только имя загруженного файла. Ajax не запускается, когда это поле теряет фокус. Это не очень простой процесс и не может быть протестирован так, но я бы предпочел, чтобы это было так. – Alex