WebDriver: Загрузка файла (C#)

В WebDriver нет специального метода для работы с загрузкой файла в веб-приложение. Загрузка файлов находится на границе функциональных возможностей WebDriver. Основное его предназначение — выполнение команд пользователя в браузере. Загрузка файла предполагает работу с операционной системой. В будущих версиях WebDriver, скорее всего, появится метод FileUpload, который будет решать эту проблему, пускай и, нарушая основную концепцию инструмента. На данный момент для заполнения поля ввода файла можно использовать стандартный метод для заполнения текстовых полей SendKeys. Для отправки файла на сервер используется Click. Пример реализации метода FileUpload:

1
2
3
4
5
6
7
8
9
        public void FileUpload()
        {
            var fileToUpload = Config.PathAndFileToUpload;
            var txtFileUpload = _driver.FindElement(By.Id("file input"));
            var btnSubmitFile = _driver.FindElement(By.Id("submit button"));            
 
            txtFileUpload.SendKeys(fileToUpload);
            btnSubmitFile.Click();
        }
        public void FileUpload()
        {
            var fileToUpload = Config.PathAndFileToUpload;
            var txtFileUpload = _driver.FindElement(By.Id("file input"));
            var btnSubmitFile = _driver.FindElement(By.Id("submit button"));            

            txtFileUpload.SendKeys(fileToUpload);
            btnSubmitFile.Click();
        }

Данный способ отработает только в тех случаях, когда тестируемое приложение имеет доступное для пользователя поле FileUpload и кнопку Submit. Для современных веб-приложений это уже редкость 🙂 Какие есть варианты обхода данного ограничения:

  • Можно загрузить файл, используя возможности JavaScript. В этой статье я рассказывал о том, как выполнять JavaScript в WebDriver.
  • Попросить команду разработки для тестового окружения отображать поле FileUpload и кнопку Submit или другой подходящий костыль.
  • Не тестировать загрузку файла авто-тестами, а переложить эту задачу на ручное тестирование 🙂 Если это не критически важный сценарий, то я считаю это вполне допустимо.