【问题标题】:Multiple Controls Drag and Drop to the Same Destination多个控件拖放到同一个目的地
【发布时间】:2017-01-31 16:18:47
【问题描述】:

我正在使用下面的代码在应用程序中拖放元素。但大多数时候它会拖放到页面的不同部分。很少将元素放置到正确的目的地。问题是将第三个元素移动到目的地时到来。从第三个元素开始,元素被放置在不同的路径中。所有三个元素的 xpath 完全相同。我总共拖动 7 个元素。从第 4 个元素开始,目标区域正在发生变化。所以问题是第三个元素正在移动到第四个元素应该去的区域。

下面更新到第 4 个元素的代码

WebElement element1 = driver.findElement(By.xpath("html/body/div[3]/div[4]/div[3]/div[1]/div[2]/div[2]/div/div/div/div/div/div[5]/div[3]/div/div[3]/div/div/div/table/tbody/tr[1]/td/table/tbody/tr[1]/td[2]/div/table/tbody/tr/td[2]/div/div/button")); 

WebElement target1 = driver.findElement(By.xpath("html/body/div[3]/div[4]/div[3]/div[1]/div[2]/div[2]/div/div/div/div/div/div[5]/div[3]/div/div[3]/div/div/div/table/tbody/tr[2]/td[1]/div"));

(new Actions(driver)).dragAndDrop(element1, target1).perform();

Thread.sleep(7000);     


WebElement element2= driver.findElement(By.xpath("html/body/div[3]/div[4]/div[3]/div[1]/div[2]/div[2]/div/div/div/div/div/div[5]/div[3]/div/div[3]/div/div/div/table/tbody/tr[1]/td/table/tbody/tr[1]/td[2]/div/table/tbody/tr/td[2]/div/div/button")); 

WebElement target2 = driver.findElement(By.xpath("html/body/div[3]/div[4]/div[3]/div[1]/div[2]/div[2]/div/div/div/div/div/div[5]/div[3]/div/div[3]/div/div/div/table/tbody/tr[2]/td[1]/div"));

(new Actions(driver)).dragAndDrop(element2, target2).perform();

Thread.sleep(7000);     


WebElement element3= driver.findElement(By.xpath("html/body/div[3]/div[4]/div[3]/div[1]/div[2]/div[2]/div/div/div/div/div/div[5]/div[3]/div/div[3]/div/div/div/table/tbody/tr[1]/td/table/tbody/tr[1]/td[2]/div/table/tbody/tr/td[2]/div/div/button")); 

WebElement target3 = driver.findElement(By.xpath("html/body/div[3]/div[4]/div[3]/div[1]/div[2]/div[2]/div/div/div/div/div/div[5]/div[3]/div/div[3]/div/div/div/table/tbody/tr[2]/td[1]/div"));

(new Actions(driver)).dragAndDrop(element3, target3).perform();

Thread.sleep(7000);


WebElement element4 = driver.findElement(By.xpath("html/body/div[3]/div[4]/div[3]/div[1]/div[2]/div[2]/div/div/div/div/div/div[5]/div[3]/div/div[3]/div/div/div/table/tbody/tr[1]/td/table/tbody/tr[1]/td[2]/div/table/tbody/tr/td[2]/div/div/button")); 

WebElement target4 = driver.findElement(By.xpath("html/body/div[3]/div[4]/div[3]/div[1]/div[2]/div[2]/div/div/div/div/div/div[5]/div[3]/div/div[3]/div/div/div/table/tbody/tr[2]/td[2]/div"));

(new Actions(driver)).dragAndDrop(element4, target4).perform();

Thread.sleep(7000);     

【问题讨论】:

  • 指定您使用的是哪个应用程序或网站@Lipson,以便我了解和直接帮助您的一个很好的参考。 :)
  • 它适用于我正在专业工作的应用程序。它是一个执行数据透视操作的页面,与 excel 中的数据透视相同。它具有所有可用字段,用户需要根据需要拖放字段他的要求

标签: java selenium selenium-webdriver drag-and-drop


【解决方案1】:

尝试这种方式,并使用相对 xpath 更好地理解。

例如,在您的情况下,有七个不同的元素需要执行拖放操作,因此,第一步应该定义不同的元素,例如source element 1。在下面的代码 sn-p 中,我只定义了两个源元素以便更好地解释。

您的第二步应该是定义目标路径。为此,请参阅下面的代码 sn-p destination element

您的第三步应该是基于您的 locator(id,xpath) 创建一个 int 或 string 数组以减少代码行数。然后使用for循环,所以for循环的次数会执行相同的代码。

有关此的更多详细信息,请参阅下面提到的代码 sn-p。

WebElement element_1 = driver.findElement(By.xpath("//li[@data-lobid='12']"));      //source element 1

WebElement element_2 = driver.findElement(By.xpath("//li[@data-lobid='21']"));     //source element 2

WebElement destination = driver.findElement(By.xpath(".//*[@id='lobModalPopUp']/div"));  //destination path

int[] array_source = new int[]{12,21};  // create fixed array for id number of source element 1 and 2

for(int i = 0; i<array_source.length; i++)  //Passing id number of source element 1 and 2 inside the for loop.
{
        WebElement all_source_element = driver.findElement(By.xpath("//li[@data-lobid='"+arraylobs[i]+"']"));  // getting all source element with the help of fixed array.

        Actions drag = new Actions(driver);
        drag.clickAndHold(all_source_element).build().perform();
        Thread.sleep(3500);
        drag.clickAndHold().moveToElement(destination).release(destination).build().perform();
        Thread.sleep(3500);
}   

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-05
    • 1970-01-01
    • 2012-07-23
    • 2013-11-26
    • 1970-01-01
    • 2017-12-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多