Перейти к содержимому

Фотография

Загрузить изображение


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 31

#1 FR33D

FR33D

    Новый участник

  • Members
  • Pip
  • 64 сообщений

Отправлено 17 июня 2013 - 10:29

Добрый всем день, это снова я)
Сегодня в тест кейсе мне требуется загрузить аватарку к себе в "Анкету", фотография находится к примеру :
E:\workspace\Autotests_framework\src\autotests\files\1.jpg
Сам тесткейс находится тут:
E:\workspace\Autotests_framework\src\autotests\tests\bl_bla_blab.java
И так, как заставить еклипс, выбрать именно эту картинку и загрузить ее? Прикрепленный файл  6-17-2013 1-26-55 PM.png   93,57К   40 Количество загрузок:

И вот код:
private void Test() throws Exception {
		driver.get(baseUrl);
		driver.manage().deleteAllCookies();
	    driver.navigate().refresh();
		Login login = new Login(driver);
		login.candidate("login", "pass");
		Thread.sleep(2000);
		driver.findElement(By.linkText("My Account")).click();
		driver.findElement(By.id("body-container")).click();
		driver.findElement(By.id("fake_pic")).click();
		driver.findElement(By.id("fake_pic")).clear();
		driver.findElement(By.id("fake_pic")).sendKeys("src\\autotests\\tests\\1.jpg"); 
		driver.findElement(By.id("fake_pic")).sendKeys(f.getAbsolutePath());
	    driver.findElement(By.xpath("//input[@value='Save Changes']")).click();
	    Assert.assertTrue(driver.getPageSource().contains("Your Profile changes have been saved."));
		}
	}

  • 0

#2 Alex

Alex

    Постоянный участник

  • Members
  • PipPipPip
  • 237 сообщений
  • ФИО:Алексей

Отправлено 17 июня 2013 - 10:36

Добрый всем день, это снова я)
Сегодня в тест кейсе мне требуется загрузить аватарку к себе в "Анкету", фотография находится к примеру :
E:\workspace\Autotests_framework\src\autotests\files\1.jpg
Сам тесткейс находится тут:
E:\workspace\Autotests_framework\src\autotests\tests\bl_bla_blab.java
И так, как заставить еклипс, выбрать именно эту картинку и загрузить ее? Прикрепленный файл  6-17-2013 1-26-55 PM.png   93,57К   40 Количество загрузок:

И вот код:

private void Test() throws Exception {
		driver.get(baseUrl);
		driver.manage().deleteAllCookies();
	    driver.navigate().refresh();
		Login login = new Login(driver);
		login.candidate("login", "pass");
		Thread.sleep(2000);
		driver.findElement(By.linkText("My Account")).click();
		driver.findElement(By.id("body-container")).click();
		driver.findElement(By.id("fake_pic")).click();
		driver.findElement(By.id("fake_pic")).clear();
		driver.findElement(By.id("fake_pic")).sendKeys("src\\autotests\\tests\\1.jpg"); 
		driver.findElement(By.id("fake_pic")).sendKeys(f.getAbsolutePath());
	    driver.findElement(By.xpath("//input[@value='Save Changes']")).click();
	    Assert.assertTrue(driver.getPageSource().contains("Your Profile changes have been saved."));
		}
	}


Передавать надо абсолютный путь:


new File("src\\autotests\\tests\\1.jpg").getAbsolutePath()
  • 0

#3 FR33D

FR33D

    Новый участник

  • Members
  • Pip
  • 64 сообщений

Отправлено 17 июня 2013 - 10:48

Сделал, не помогло. Все так же глухо
  • 0

#4 appmen

appmen

    Опытный участник

  • Members
  • PipPipPipPip
  • 408 сообщений
  • ФИО:Victor

Отправлено 17 июня 2013 - 11:02

попробуйте вместо строчки
driver.findElement(By.id("fake_pic")).sendKeys("src\\autotests\\tests\\1.jpg");
написать
driver.findElement(By.id("fake_pic")).sendKeys("полный путь к файлу");

  • 0

#5 FR33D

FR33D

    Новый участник

  • Members
  • Pip
  • 64 сообщений

Отправлено 17 июня 2013 - 11:07

попробуйте вместо строчки

driver.findElement(By.id("fake_pic")).sendKeys("src\\autotests\\tests\\1.jpg");
написать
driver.findElement(By.id("fake_pic")).sendKeys("полный путь к файлу");

Полный путь к файлу не катит, так как работаю в офисе и у всех workspace находится в разных местах, если этот тест запустят с другого компа - картинку просто не увидит. В этом то и проблема...
  • 0

#6 Keiga

Keiga

    Постоянный участник

  • Members
  • PipPipPip
  • 174 сообщений
  • ФИО:Евгений
  • Город:Москва


Отправлено 17 июня 2013 - 11:46

Если я правильно понял, то Вы пытаетесь оперировать с окном Windows через WebDriver. Это не получится, т.к. после нажатия Browse открывается окно с которым WebDriver не может работать. Нужно использовать сторонние средства, например скрипт Autoit. Вот статья на эту тему
  • 1

#7 FR33D

FR33D

    Новый участник

  • Members
  • Pip
  • 64 сообщений

Отправлено 17 июня 2013 - 11:57

Если я правильно понял, то Вы пытаетесь оперировать с окном Windows через WebDriver. Это не получится, т.к. после нажатия Browse открывается окно с которым WebDriver не может работать. Нужно использовать сторонние средства, например скрипт Autoit. Вот статья на эту тему

Спасибо, статья конечно интересная, но я так и не понял как осуществить подобную идею в моей ситуации...если вам не трудно, можно хотя бы примерно показать что мне с этим всем стоит делать. Спасибо.
  • 0

#8 Keiga

Keiga

    Постоянный участник

  • Members
  • PipPipPip
  • 174 сообщений
  • ФИО:Евгений
  • Город:Москва


Отправлено 17 июня 2013 - 12:37

Спасибо, статья конечно интересная, но я так и не понял как осуществить подобную идею в моей ситуации...если вам не трудно, можно хотя бы примерно показать что мне с этим всем стоит делать. Спасибо.

Вам нужно сделать готовый скрипт autoit. положить его в проект как exe файл. потом selenium будет доходить до момента когда вызывается окно куда надо указать путь к файлу, при этом Selenium же будет запускать скрипт и передавать ему в качестве пути адрес до файла с картинкой. Скрипт же будет вводить путь, жать на кнопочки и после того как выберет файл - вернет управление Selenium'у который уже продолжит выполнять сценарий дальше.
  • 1

#9 FR33D

FR33D

    Новый участник

  • Members
  • Pip
  • 64 сообщений

Отправлено 17 июня 2013 - 13:00


Спасибо, статья конечно интересная, но я так и не понял как осуществить подобную идею в моей ситуации...если вам не трудно, можно хотя бы примерно показать что мне с этим всем стоит делать. Спасибо.

Вам нужно сделать готовый скрипт autoit. положить его в проект как exe файл. потом selenium будет доходить до момента когда вызывается окно куда надо указать путь к файлу, при этом Selenium же будет запускать скрипт и передавать ему в качестве пути адрес до файла с картинкой. Скрипт же будет вводить путь, жать на кнопочки и после того как выберет файл - вернет управление Selenium'у который уже продолжит выполнять сценарий дальше.

Попробывал написать скрипт, выдает ошибки, не знаю с чем связано...силениум не подгружает(
  • 0

#10 tab15

tab15

    Активный участник

  • Members
  • PipPip
  • 128 сообщений

Отправлено 17 июня 2013 - 13:06

А не может проблема быть просто в опечатке? У вас там пути к картинке не совпадают.
driver.findElement(By.id("fake_pic")).sendKeys("src\\autotests\\tests\\1.jpg");
src\autotests\files\1.jpg

  • 0

#11 FR33D

FR33D

    Новый участник

  • Members
  • Pip
  • 64 сообщений

Отправлено 17 июня 2013 - 13:47

А не может проблема быть просто в опечатке? У вас там пути к картинке не совпадают.

driver.findElement(By.id("fake_pic")).sendKeys("src\\autotests\\tests\\1.jpg");
src\autotests\files\1.jpg

Нет, это к сожалению не опечатка( Хотелось бы чтоб все было так просто)
  • 0

#12 appmen

appmen

    Опытный участник

  • Members
  • PipPipPipPip
  • 408 сообщений
  • ФИО:Victor

Отправлено 17 июня 2013 - 13:59

т.е. вы хотите, чтобы картинка из "E:\workspace\Autotests_framework\src\autotests\files\1.jpg" волшебным образом материализовалась в "...src\\autotests\\tests\\1.jpg"?
Можно же написать
driver.findElement(By.id("fake_pic")).sendKeys("src\\autotests\\files\\1.jpg");

  • 0

#13 Keiga

Keiga

    Постоянный участник

  • Members
  • PipPipPip
  • 174 сообщений
  • ФИО:Евгений
  • Город:Москва


Отправлено 17 июня 2013 - 14:22

т.е. вы хотите, чтобы картинка из "E:\workspace\Autotests_framework\src\autotests\files\1.jpg" волшебным образом материализовалась в "...src\\autotests\\tests\\1.jpg"?
Можно же написать

driver.findElement(By.id("fake_pic")).sendKeys("src\\autotests\\files\\1.jpg");

Дело в том что сама строчка
driver.findElement(By.id("fake_pic")).sendKeys("src\\autotests\\files\\1.jpg");
не имеет смысла, т.к. в какой-то элемент на странице с id "fake_pic" хотят передать нажатие клавиш которые соответствую пути к некой картинки. А передавать надо в окно, которое не относится к вебстранице и о котором webdriver ничего не знает.
Поэтому как не меняй путь, ничего не изменится, вот если бы на странице было поле, куда можно руками ввести путь и нажать upload, тогда да.
  • 0

#14 barancev

barancev

    Администратор

  • Admin
  • PipPipPipPipPipPip
  • 6 871 сообщений
  • ФИО:Алексей Баранцев
  • Город:Россия, Москва


Отправлено 17 июня 2013 - 18:40

Не делайте click по файловому полю (то есть по кнопке Browse) -- сразу выполняйте sendKeys в это поле.
И вообще, покажите страничку, на которой должен выполняться этот скрипт -- было бы неплохо посмотреть на её код.
  • 1
Алексей Баранцев
Тренинги для тестировщиков (тестирование производительности, защищенности, тест-дизайн, автоматизация):
Линейка тренингов по Selenium

#15 FR33D

FR33D

    Новый участник

  • Members
  • Pip
  • 64 сообщений

Отправлено 18 июня 2013 - 06:35

Не делайте click по файловому полю (то есть по кнопке Browse) -- сразу выполняйте sendKeys в это поле.
И вообще, покажите страничку, на которой должен выполняться этот скрипт -- было бы неплохо посмотреть на её код.

Я же в самом первом посте прикрепил скриншот, а так же код теста, страницу показать не могу, так как она локальная. sendKeys - это вариант при статическом пути к файлу, у меня же ситуация что есть больше 5 сотрудников и у каждого workspace, где находится этот файл, находится в 5 абсолютно разных местах на различных дисках.
Есть ли у кого нибудь рабочий скрипт autoit? Возможно Keiga подсказал отличное решение, но я не могу его осуществить(
  • 0

#16 barancev

barancev

    Администратор

  • Admin
  • PipPipPipPipPipPip
  • 6 871 сообщений
  • ФИО:Алексей Баранцев
  • Город:Россия, Москва


Отправлено 18 июня 2013 - 06:53

Так в чём проблема? Java не может найти файл? Или имя файла не вводится в диалог открытия файла? Из описания неясно.

Ну и ещё раз повторю: не делайте click по файловому полю ввода!

driver.findElement(By.linkText("My Account")).click();
driver.findElement(By.id("body-container")).click();
driver.findElement(By.id("fake_pic")).sendKeys(f.getAbsolutePath());
driver.findElement(By.xpath("//input[@value='Save Changes']")).click();

Если, конечно, это файловое поле ввода. Вы же страничку не показываете, а по скриншоту это невозможно понять.
  • 0
Алексей Баранцев
Тренинги для тестировщиков (тестирование производительности, защищенности, тест-дизайн, автоматизация):
Линейка тренингов по Selenium

#17 FR33D

FR33D

    Новый участник

  • Members
  • Pip
  • 64 сообщений

Отправлено 18 июня 2013 - 07:14

Так в чём проблема? Java не может найти файл? Или имя файла не вводится в диалог открытия файла? Из описания неясно.

Ну и ещё раз повторю: не делайте click по файловому полю ввода!

driver.findElement(By.linkText("My Account")).click();
driver.findElement(By.id("body-container")).click();
driver.findElement(By.id("fake_pic")).sendKeys(f.getAbsolutePath());
driver.findElement(By.xpath("//input[@value='Save Changes']")).click();

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

Имя не вводится в диалог открытого окна, а из за того что не вводится невозможно понять находит ли оно его вообще.
Без клика, окно не открывается вообще и тест валится. Я прикрепил скриншот, там же видно что нужно в окно, которое открылось ввести путь к указанному файлу.
  • 0

#18 appmen

appmen

    Опытный участник

  • Members
  • PipPipPipPip
  • 408 сообщений
  • ФИО:Victor

Отправлено 18 июня 2013 - 07:17

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

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

Есть ли у кого нибудь рабочий скрипт autoit?

barancev - у него есть и он его дыже выкладывал :good:
  • 0

#19 barancev

barancev

    Администратор

  • Admin
  • PipPipPipPipPipPip
  • 6 871 сообщений
  • ФИО:Алексей Баранцев
  • Город:Россия, Москва


Отправлено 18 июня 2013 - 07:25

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

Selenium пытается заполнять файловые поля ввода максимально быстрым и экономичным способом. В большинстве браузеров он вообще не открывает для этого диалог (такая необходимость есть только в IE). Поэтому, кликнув по кнопке Browse Вы препятствуете работе Selenium. Не нужно по ним кликать. Если потребуется -- Selenium сам это сделает. Просто используйте sendKeys, как для других полей ввода.
  • 0
Алексей Баранцев
Тренинги для тестировщиков (тестирование производительности, защищенности, тест-дизайн, автоматизация):
Линейка тренингов по Selenium

#20 barancev

barancev

    Администратор

  • Admin
  • PipPipPipPipPipPip
  • 6 871 сообщений
  • ФИО:Алексей Баранцев
  • Город:Россия, Москва


Отправлено 18 июня 2013 - 07:28


Есть ли у кого нибудь рабочий скрипт autoit?

barancev - у него есть и он его дыже выкладывал Изображение


Не путайте
загрузку файлов НА сервер (upload) -- это делается штатными средствами Selenium, обычный sendKeys отлично с этим справляется в большинстве случаев,
и
загрузку файлов С сервера (download), тут действительно возникают сложности.
  • 0
Алексей Баранцев
Тренинги для тестировщиков (тестирование производительности, защищенности, тест-дизайн, автоматизация):
Линейка тренингов по Selenium


Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных