测试案例:从网页中特定位置获取所有可拖动元素的数组列表,及相应目标位置的元素数组列表,并将所有可拖动元素拖动到任意的目标位置。
测试实现代码:
import java.util.ArrayList;
import org.openqa.selenium.browserlaunchers.Sleeper;
import org.openqa.selenium.ie.InternetExplorerDriver;
import org.openqa.selenium.interactions.Actions;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
public class test {
public static void
main(String[] args) {
final String
sUrl = http://www.***.com;
System.setProperty("webdriver.ie.driver",IEDriverPath());
DesiredCapabilities ieCapabilities =
DesiredCapabilities.internetExplorer();
ieCapabilities.setCapability(InternetExplorerDriver.INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS,true);
ieCapabilities.setCapability(InternetExplorerDriver.IGNORE_ZOOM_SETTING,
true);
ieCapabilities.setCapability(InternetExplorerDriver.INITIAL_BROWSER_URL, sUrl);
//若不对IEdriver进行URL初始化,代码只能成功执行到driver.get(sUrl)这一步,后面的代码运行将出错,而且driver.quit()也quit不了。而加上了URL初始化到要测试的网站,则代码执行就不会出现这些问题。
//而且我发现若不将网页在此初始化到要测试的网站,则getWindowHandle()将经常失败,driver也不能成功退出。而若在此作了初始化的处理,则即使get网站里的其它网页getWindowHandle()也总是成功,driver也能成功退出。
//(没看到别人有遇到这样的问题,为什么我会遇到这样的问题呢?难道是我的测试环境有问题?(我的环境:IE11+Selenium2.39+IEdriver2.39(x86)))
WebDriver driver;
driver = new
InternetExplorerDriver(ieCapabilities);
try {
driver.get(sUrl+"/cart");
dragPhotos(driver);
driver.quit();
} catch (Exception e) {
// TODO
Auto-generated catch block
System.out.println(e.getClass().getName() + "/n"
+ e.getMessage());
driver.quit();
}
}
public static void
dragPhotos(WebDriver driver) throws Exception
{
ArrayList bySource = getElementsList(driver,
"#THUMB_%d > img",
"cssSelector");
ArrayList byTarget = getElementsList(driver,
"UCD_PHOTO_DRAGGER_%d",
"id");
if(bySource.isEmpty() || byTarget.isEmpty())
{
throw new
Exception("No source element or target
element found, drag-drop test blocked!");
}
for(int i=1;i
{
int j =
(int)
((byTarget.size()-1)*Math.random());
dragAndDrop(driver, bySource.get(i),
byTarget.get(j));
}
}
public staticBoolean dragAndDrop(WebDriver driver, By
source, By target){
try{
Actions action = new
Actions(driver);
WebDriverWait wait = new
WebDriverWait(driver, 60);
WebElement elementSource =
wait.until(ExpectedConditions.presenceOfElementLocated(source));
WebElement elementTarget =
wait.until(ExpectedConditions.presenceOfElementLocated(target));
action.dragAndDrop(elementSource,
elementTarget).perform();
Sleeper.sleepTight(5);
return true;
}
catch(Exception
e)
{
System.out.println(e.getClass().getName() + " "
+ e.getMessage());
return false;
}
}
public static ArrayList
getElementsList(WebDriver driver, String regStrElement, String
byType)
{
String strElement;
ArrayList elementList = new
ArrayList();
By element;
for(int i=0;;){
strElement = String.format(regStrElement,
i);
switch(byType){
case "id":
element = By.id(strElement);
break;
case "cssSelector":
element = By.cssSelector(strElement);
break;
case "xpath":
element = By.xpath(strElement);
break;
case "linkText":
element = By.linkText(strElement);
break;
case "name":
element = By.name(strElement);
break;
case "className":
element = By.className(strElement);
break;
case "partialLinkText":
element =
By.partialLinkText(strElement);
break;
default:
element = By.id(strElement);
break;
}
try{
driver.findElement(element);
elementList.add(element);
i++;
}
catch(Exception
e)
{
System.out.println(e.getClass().getName() + " "
+ e.getMessage());
break;
}
}
return elementList;
}
}