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

Фотография

Drag'N'Drop в Selenium WebDriver

webdriver dragndrop

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

#1 Cornelius

Cornelius

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

  • Members
  • Pip
  • 8 сообщений
  • ФИО:Ed


Отправлено 26 января 2014 - 17:47

Добрый день!

 

Решил начать осваивать Selenium Webdriver + JUnit. Пока что записываю тесты в Selenium IDE, затем переформатирую их в JUnit4. Редактирую и дописываю уже прямо в Eclipse.

 

Стала задача автоматизировать действие перетаскивания объекта - http://clip2net.com/s/6G5d9x

 

Т. к. не знаю, как написать такие действия напрямую, решил записать их в Selenium IDE. Но это действие не записывается. Решил написать в Eclipse, используя Java. Даже нашел пример:

 

WebElement element = driver.findElement(By.name("source"));
WebElement target = driver.findElement(By.name("target"));

new Actions(driver).dragAndDrop(element, target).perform();

 

Но мой Эклипс рукается на этот код: "Actions cannot be resolved to a type". Я так понимаю, что я где-то чего-то не объявил перед этим.

 

Извините заранее. Я еще новичок в Java. Заранее благодарю за помощь.


  • 0

#2 Petrov.Sergey

Petrov.Sergey

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

  • Members
  • PipPipPipPip
  • 446 сообщений
  • ФИО:Petrov Sergey
  • Город:МО, Лобня


Отправлено 26 января 2014 - 18:05

Весь код, содержащий эту строку, дайте, пожалуйста.

 

Я вставил в свой "мини-проект" Вашу строчку - никаких ошибок:

try {
	driver = Connect.init();
	int i = 0, count = 0;

	new Actions(driver).dragAndDrop(buttonSearch, buttonClear);
	for (Note note : root.getNote()) {
		......
	}
} catch (Exception e) {
	e.printStackTrace();
} finally {
	driver.quit();
}

При этом импорт содержит такую строчку:

import org.openqa.selenium.interactions.Actions;


  • 1
Форум читаю набегами. По возникшим вопросам можно в скайп (в профиле).

#3 Cornelius

Cornelius

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

  • Members
  • Pip
  • 8 сообщений
  • ФИО:Ed


Отправлено 26 января 2014 - 18:33

 

При этом импорт содержит такую строчку:

import org.openqa.selenium.interactions.Actions;

 

Спасибо огромное! Именно в этом импорте и была проблема. Вот мой полный код теста, который уже работает:

 

package com.bsn.tests;
 
import java.util.concurrent.TimeUnit;
import org.junit.*;
import static org.junit.Assert.*;
import org.openqa.selenium.*;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.interactions.Actions;
 
 
public class CreatePlaylist {
  private WebDriver driver;
  private String baseUrl;
  private boolean acceptNextAlert = true;
  private StringBuffer verificationErrors = new StringBuffer();
 
 
  @Before
  public void setUp() throws Exception {
    driver = new FirefoxDriver();
    driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
  }
 
  @Test
  public void testUntitled2() throws Exception {
    driver.get(baseUrl + "/signin.aspx?ReturnUrl=%2fgroups.aspx");
    driver.findElement(By.id("TextBoxAccount")).clear();
    driver.findElement(By.id("TextBoxAccount")).sendKeys("eizotov");
    driver.findElement(By.id("TextBoxEmail")).clear();
    driver.findElement(By.id("TextBoxEmail")).sendKeys("eizotov@aaaa.aaaa");
    driver.findElement(By.id("TextBoxPassword")).clear();
    driver.findElement(By.id("TextBoxPassword")).sendKeys("aaaa");
    driver.findElement(By.id("LinkButtonLogin")).click();
    driver.findElement(By.id("ctl00_TabPlaylist")).click();
    driver.findElement(By.id("ctl00_ContentPlaceHolderTabBody_PermissionViewCreateDynamicPlaylist_LinkButtonAddNewPlaylist")).click();
    driver.findElement(By.id("ctl00_ContentPlaceHolderForm_CreatePlaylistDialog_ASPxPopupControlSimpleCreateDialog_TextBoxFieldName")).sendKeys("NewPlaylist N001");
    driver.findElement(By.id("ctl00_ContentPlaceHolderForm_CreatePlaylistDialog_ASPxPopupControlSimpleCreateDialog_TPCFm1_ImageButtonSave")).click();
    WebElement element = driver.findElement(By.id("ctl00_ContentPlaceHolderTabBody_ASPxDataViewLibrary_IT0_Img3"));
    WebElement target = driver.findElement(By.id("playlist"));
 
    new Actions(driver).dragAndDrop(element, target).perform();
  }
 
  @After
  public void tearDown() throws Exception {
 
    String verificationErrorString = verificationErrors.toString();
    if (!"".equals(verificationErrorString)) {
      fail(verificationErrorString);
    }
  }
}

  • 0

#4 Petrov.Sergey

Petrov.Sergey

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

  • Members
  • PipPipPipPip
  • 446 сообщений
  • ФИО:Petrov Sergey
  • Город:МО, Лобня


Отправлено 26 января 2014 - 19:17

Извините, я неправильно выразился. Целиком класс копировать не надо было :) Имелось в виду несколько строчек, как в приведённом мной примере.

В любом случае, разобрались - отлично!


  • 1
Форум читаю набегами. По возникшим вопросам можно в скайп (в профиле).

#5 Cornelius

Cornelius

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

  • Members
  • Pip
  • 8 сообщений
  • ФИО:Ed


Отправлено 26 января 2014 - 22:18

Если вы не против, то я задам еще один вопрос. Он также касается драг-н-дроп, поэтому новая тема не нужна.

 

Я собираюсь перетаскивать файлы из одной области в другую. В той области, откуда я тащу файлы, есть возможность менять размер значков этим файлам. При изменении размера меняется ID, по которому я сначала хотел инициализировать файл. Нашел вариант с xPath, и это подошло отлично! xPath файло-объекта не изменяется при изменении размера значка.

 

Но стал такой вопрос: что можно использовать, чтобы выбирать файлы по расширению или имени? Что-то вроде: выбрать любой файл из области по маске *.JPG.

 

Извините заранее, если вопрос сумбурный


  • 0

#6 xRomanx

xRomanx

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

  • Members
  • Pip
  • 42 сообщений
  • ФИО:Боев Роман

Отправлено 27 января 2014 - 06:41

Можно использовать executescript, например http://selenium.goog...ptExecutor.html . Этот метод позволяет выполнять javascript, на котором можно выбирать файлы по расширению, например через регулярное вырожение или что то похожее http://otvety.google...c4f4a736a1202aa


  • 0

#7 xRomanx

xRomanx

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

  • Members
  • Pip
  • 42 сообщений
  • ФИО:Боев Роман

Отправлено 27 января 2014 - 06:55

Или сформировать массив/список файлов, отсортировать по расширению и использовать. Например на языке C# это может выглядеть так:

 

IList<IWebElement> elementImages = RemoteWebDriver.FindElementByCssSelector("image");


  • 0


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

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