Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/375.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用SeleniumWebDriver进行拖放操作_Java_Selenium Webdriver_Selenium Chromedriver_Selenium Firefoxdriver - Fatal编程技术网

Java 如何使用SeleniumWebDriver进行拖放操作

Java 如何使用SeleniumWebDriver进行拖放操作,java,selenium-webdriver,selenium-chromedriver,selenium-firefoxdriver,Java,Selenium Webdriver,Selenium Chromedriver,Selenium Firefoxdriver,在使用SeleniumWebDriver实现拖放功能时,我遇到了一个持久的问题 根据WebDriver文档,拖放操作应使用以下命令进行: WebElement element = driver.findElement(By.name("source")); WebElement target = driver.findElement(By.name("target")); (new Actions(driver)).dragAndDrop(element, target).perform();

在使用SeleniumWebDriver实现拖放功能时,我遇到了一个持久的问题

根据WebDriver文档,拖放操作应使用以下命令进行:

WebElement element = driver.findElement(By.name("source"));
WebElement target = driver.findElement(By.name("target"));
(new Actions(driver)).dragAndDrop(element, target).perform();
然而,这似乎不适用于Firefox或Chrome驱动程序

下面是一个示例测试,它尝试在2个公共可拖动网站上使用拖放功能。测试是参数化的,并使用FirefoxDriver和ChromeDriver执行

package test;

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.interactions.Actions;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;

@RunWith(Parameterized.class)
public class DragAndDropTest {

    enum Browser {FIREFOX, CHROME};

    private Browser browser;
    private WebDriver driver;

    @Parameters
    public static Collection<Object[]> data() throws Exception {
        List<Object[]> params = new ArrayList<Object[]>();
        params.add(new Object[] { Browser.FIREFOX });
        params.add(new Object[] { Browser.CHROME });
        return params;
    }

    public DragAndDropTest(Browser browser) {
        this.browser = browser;
    }

    @Before
    public void before() {
        switch (browser) {
        case FIREFOX:
            this.driver = new FirefoxDriver();
            break;
        case CHROME:
            this.driver = new ChromeDriver();
        }
    }

    @After
    public void tearDown() {
        driver.quit();
    }

    @Test
    public void test1() {
        By drag = By.id("div1");
        By drop = By.id("div2");
        By expected = By.cssSelector("#div2 #drag1");
        // load page
        driver.get("http://www.w3schools.com/html/html5_draganddrop.asp");
        // wait for draggable element visible
        new WebDriverWait(driver, 10).until(ExpectedConditions.visibilityOfElementLocated(drag));
        // drag and drop
        new Actions(driver).dragAndDrop(driver.findElement(drag), driver.findElement(drop)).perform();
        // verify results
        Assert.assertEquals("Drag&Drop failed", 1,driver.findElements(expected).size());
    }

    @Test
    public void test2() {
        By drag = By.id("Item1");
        By drop = By.id("Item5");
        By expected = By.cssSelector("#DragContainer5 #Item1");
        // load page
        driver.get("http://www.webreference.com/programming/javascript/mk/column2/index.html");
        // wait for draggable element visible
        new WebDriverWait(driver, 10).until(ExpectedConditions.visibilityOfElementLocated(drag));
        // drag and drop
        new Actions(driver).dragAndDrop(driver.findElement(drag), driver.findElement(drop)).perform();
        // verify results
        Assert.assertEquals("Drag&Drop failed", 1, driver.findElements(expected).size());
    }
}
封装测试;
导入java.util.ArrayList;
导入java.util.Collection;
导入java.util.List;
导入org.junit.After;
导入org.junit.Assert;
导入org.junit.Before;
导入org.junit.Test;
导入org.junit.runner.RunWith;
导入org.junit.runners.Parameterized;
导入org.junit.runners.Parameterized.Parameters;
导入org.openqa.selenium.By;
导入org.openqa.selenium.WebDriver;
导入org.openqa.selenium.chrome.ChromeDriver;
导入org.openqa.selenium.firefox.FirefoxDriver;
导入org.openqa.selenium.interactions.Actions;
导入org.openqa.selenium.support.ui.ExpectedConditions;
导入org.openqa.selenium.support.ui.WebDriverWait;
@RunWith(参数化的.class)
公共类DragAndDropTest{
枚举浏览器{FIREFOX,CHROME};
专用浏览器;
私有网络驱动程序;
@参数
公共静态集合数据()引发异常{
List params=new ArrayList();
添加(新对象[]{Browser.FIREFOX});
添加(新对象[]{Browser.CHROME});
返回参数;
}
公共DragAndDropTest(浏览器){
this.browser=浏览器;
}
@以前
在()之前公开无效{
开关(浏览器){
案例FIREFOX:
this.driver=新的FirefoxDriver();
打破
外壳铬:
this.driver=新的ChromeDriver();
}
}
@之后
公共无效拆卸(){
driver.quit();
}
@试验
公共void test1(){
按拖动=按.id(“div1”);
按下降=按id(“第2部分”);
按预期=按.cssSelector(“#div2#drag1”);
//加载页
驱动程序。获取(“http://www.w3schools.com/html/html5_draganddrop.asp");
//等待可拖动元素可见
新WebDriverWait(驱动程序,10)。直到(预期条件。元素所在位置的可见性(拖动));
//拖放
新操作(驱动程序).dragAndDrop(驱动程序.findElement(拖动),驱动程序.findElement(拖放)).perform();
//验证结果
Assert.assertEquals(“拖放失败”,1,driver.findElements(应为).size());
}
@试验
公共无效测试2(){
按拖动=按.id(“项1”);
按滴=按id(“第5项”);
按预期=按.cssSelector(“#DragContainer5#Item1”);
//加载页
驱动程序。获取(“http://www.webreference.com/programming/javascript/mk/column2/index.html");
//等待可拖动元素可见
新WebDriverWait(驱动程序,10)。直到(预期条件。元素所在位置的可见性(拖动));
//拖放
新操作(驱动程序).dragAndDrop(驱动程序.findElement(拖动),驱动程序.findElement(拖放)).perform();
//验证结果
Assert.assertEquals(“拖放失败”,1,driver.findElements(应为).size());
}
}

关于上述测试为何不能正常运行的任何建议/指针?

W3C站点具有Webdriver目前不支持的HTML5拖放功能。就本问题而言—

但是在您的第一个测试用例中,您应该将其用于drag元素。 按拖动=按.id(“拖动”)


这是您正在拖动的图像的定位器。

感谢您澄清WebDriver中的未决问题。另外,在第一个示例测试中发现了无效的定位器名称(由于WebDriver中的开放性问题,没有修复测试)。