У многих, кто начинает автоматизировать возникает вопрос загрузки файла на сайт.
Решил сделать базовый пример работы с формой на github.com/tit/upload_file.
В нём сильно не хватает примера на Java. Помогите с ним.
Python
##Ruby
#Java
#C Sharp
У многих, кто начинает автоматизировать возникает вопрос загрузки файла на сайт.
Решил сделать базовый пример работы с формой на github.com/tit/upload_file.
В нём сильно не хватает примера на Java. Помогите с ним.
##Ruby
#Java
#C Sharp
Я товарищу @TIT пулл риквест отправил
https://github.com/tit/upload_file/pulls
Ждемс апрува и добавления в шапку топика
Апрувил, спасибо!
Добавил.
Надо переместить примеры в GitHub - atinfo/at.info-knowledge-base: http://automated-testing.info knowledge base on test automation examples
@dzhariy @TIT надо будет полезные коды выносить в соответствующие папки в git репозиторий.
Надо бы завести, сейчас это очень нужная вещь, а тем более мы ее берем на вооружение, плюс лишними знания использования git не будут. @joemast как создать аккаунт на github скажи название аккаунта я тебя добавлю в репозиторий.
всем привет! Пожалуйста подскажите, можно ли загрузить файл если тесты
запускаются на удаленном сервере а не локадьно(если да, то интересует
какой будет путь к файлу) проект лежит на репозитории в битбакет, тесты
запускаются на
jenkins
Загружаемый файл в любом случае должен находиться на той машине, где крутиться тест. И путь у него будет локальным. Или я неправильно понял вопрос?
в том то и дело, тесты запускаются не локально, а на удаленном сервере
Если тесты находятся и запускаются на удалённой машине, то и загружаемый файл должен находится на той же самой удалённой машине.
либо его можно сначала скачать на локальную машину, где запускаются тесты, а потом уже загрузить (но зачем?)
Вот тут написано как делать. Если кратко, то используется метод 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();
}
}
Помогите пожалуйста с Codeception версией, использую Webdriver ($I->attachFile(’#file’, ‘logotest1.jpg’) Файл прикреляеться но форма не отпраляеться, jQuery говорит: Operation insecure. Я понимаю что это защита браузера от присвоения значения для input file програмно но не могу обойти. Спасибо.
Подскажите, что делаю не так?
$((By.className ("fileuploader-input"))).sendKeys ("/src/settings/files/test.jpg");
Элемент с [class="fileuploader-input"]
является div
.
В div
нельзя (почти нельзя) отправлять send_keys
.
Для загрузки файла вам нужно отправить его путь элементу input[type="file"]
.
В вашем случае, нужно «работать» с элементом input[type="file"][name="files[]"]
.
С помощью какого локатора мне искать?By.? (" ")
$(By.xpath ("//input[@type='file']")).sendKeys ("/src/settings/files/test.jpg");
Вот так?
list = os.listdir('c:\\Python37\\'+str(t))
self.driver.find_element_by_xpath('//*[@id="form-group-photo"]/div/div/div[4]/div/input').send_keys("C:\\Python37\\"+str(t)+"\\"+list[0])
for i in list[1:]:
try:
self.driver.find_element_by_xpath('//*[@id="form-group-photo"]/div/div/div[3]/div/div/button').send_keys("C:\\Python37\\"+str(t)+"\\"+i)
except NoSuchElementException:
print('Фото не загрузились')
Такая беда: нужно загрузить несколько фото. Первое загружается нормально. А вот втрое и последующие с глюком.
Вместо просто второго загружается и первое и второе. Вместо просто третьего, загружаются первое, второе и третье.
Т.е. они получаются задублированы.
И дело, скорее всего, не в коде, а в особенностях сайта. Т.к. с помощью send_keys я передаю элементу абсолютный адрес, а когда делаю это второй раз, там все еще хранится первый. Как-то так.