Удаленка для jenkins+selenide+selenoid+allure+docker спецов на 2-3 часа в день. 100% remote! Присоединиться к проекту

Загрузка файла через WebDriver


(Сергей Блохин) #1

У многих, кто начинает автоматизировать возникает вопрос загрузки файла на сайт.
Решил сделать базовый пример работы с формой на github.com/tit/upload_file.
В нём сильно не хватает примера на Java. Помогите с ним. :slight_smile:

Python

##Ruby

#Java

#C Sharp


Диалог выбора и загрузки файла (WebDriver)
(Mykhailo Poliarush) #2

@joemast поможешь с java версией?
@dzhariy поможешь с С# версией?


(Дмитрий Жарий) #3

Я товарищу @TIT пулл риквест отправил

Ждемс апрува и добавления в шапку топика :smiley:


(Сергей Блохин) #4

Апрувил, спасибо!


(Александр Таранков) #5

Отправил код @TIT по-старинке в личку (нет у меня ни git, ни аккаунта на github) :smile:


(Сергей Блохин) #6

Добавил.


(Mykhailo Poliarush) #7

Надо переместить примеры в https://github.com/atinfo/at.info-knowledge-base

Я уже сделал https://github.com/atinfo/at.info-knowledge-base/tree/master/functional%20test%20automation/webdriver/file%20upload

@dzhariy @TIT надо будет полезные коды выносить в соответствующие папки в git репозиторий.

Надо бы завести, сейчас это очень нужная вещь, а тем более мы ее берем на вооружение, плюс лишними знания использования git не будут. @joemast как создать аккаунт на github скажи название аккаунта я тебя добавлю в репозиторий.


Загрузка файлов через WebDriver на SauceLabs
(Rostyslav Ignatenko) #8

всем привет! Пожалуйста подскажите, можно ли загрузить файл если тесты
запускаются на удаленном сервере а не локадьно(если да, то интересует
какой будет путь к файлу) проект лежит на репозитории в битбакет, тесты
запускаются на
jenkins


(Сергей Блохин) #9

Загружаемый файл в любом случае должен находиться на той машине, где крутиться тест. И путь у него будет локальным. Или я неправильно понял вопрос?


(Rostyslav Ignatenko) #10

в том то и дело, тесты запускаются не локально, а на удаленном сервере


(Сергей Блохин) #11

Если тесты находятся и запускаются на удалённой машине, то и загружаемый файл должен находится на той же самой удалённой машине.


(Stan) #12

либо его можно сначала скачать на локальную машину, где запускаются тесты, а потом уже загрузить (но зачем?)


(Александр Таранков) #13

Вот тут написано как делать. Если кратко, то используется метод setFileDetector:

all you need to do is use the setFileDetector method to let WebDriver know that you’re uploading files from your local computer to a remote server instead of just typing a path. Almost magically, the file will be base64 encoded and sent transparently through the JSON Wire Protocol for you before writing the fixed remote path

Пример кода оттуда же:

import junit.framework.Assert;
import junit.framework.TestCase;
import org.openqa.selenium.*;
import org.openqa.selenium.remote.*;
import java.net.URL;
import java.util.concurrent.TimeUnit;
    public class TestingUploadSe2Sauce extends TestCase {
    private RemoteWebDriver driver;
    public void setUp() throws Exception {
            DesiredCapabilities capabillities = DesiredCapabilities.firefox();
            capabillities.setCapability("version", "7");
            capabillities.setCapability("platform", Platform.XP);
            capabillities.setCapability("selenium-version", "2.18.0");
            capabillities.setCapability("name", "Remote File Upload using Selenium 2's FileDetectors");
        driver = new RemoteWebDriver(
            new URL("http://<username>:<api-key>@ondemand.saucelabs.com:80/wd/hub"),
        capabillities);
        driver.setFileDetector(new LocalFileDetector());
        driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
}

public void testSauce() throws Exception {
        driver.get("http://sso.dev.saucelabs.com/test/guinea-file-upload");
        WebElement upload = driver.findElement(By.id("myfile"));
        upload.sendKeys("/Users/sso/the/local/path/to/darkbulb.jpg");
        driver.findElement(By.id("submit")).click();
        driver.findElement(By.tagName("img"));
        Assert.assertEquals("darkbulb.jpg (image/jpeg)", driver.findElement(By.tagName("p")).getText());
}
public void tearDown() throws Exception {
      driver.quit();

}
}

(Олег Корнійчук) #14

Помогите пожалуйста с Codeception версией, использую Webdriver ($I->attachFile(’#file’, ‘logotest1.jpg’):wink: Файл прикреляеться но форма не отпраляеться, jQuery говорит: Operation insecure. Я понимаю что это защита браузера от присвоения значения для input file програмно но не могу обойти. Спасибо.


(stek) #15

Подскажите, что делаю не так?

$((By.className ("fileuploader-input"))).sendKeys ("/src/settings/files/test.jpg");

(Сергей Блохин) #16

Элемент с [class="fileuploader-input"] является div.
В div нельзя (почти нельзя) отправлять send_keys.
Для загрузки файла вам нужно отправить его путь элементу input[type="file"].
В вашем случае, нужно «работать» с элементом input[type="file"][name="files[]"].


(stek) #17

С помощью какого локатора мне искать?By.? (" ")

$(By.xpath ("//input[@type='file']")).sendKeys ("/src/settings/files/test.jpg");

Вот так?