我目前正在学习如何使用操作类,而我在元素的移动中遇到了一些麻烦,我不确定问题是否在我的代码中或网页中我用来测试。基本上,我想执行多个换句,
Drag1 -> Drag2
Drag2 -> Drag1
Drag3 -> Drag4
Drag4 -> Drag2
因此,最终元素的顺序应该看起来像:
Drag1
Drag4
Drag2
Drag3
Drag5
而不是发生的事情是
Drag1 -> Drag2
Drag2 -> Drag1
Drag1 -> Drag2
Drag2 -> Drag1
前两个操作只是重复,它根本不会触摸drag3 and drag4 ....
这是我的代码:
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using OpenQA.Selenium.Interactions;
using System.Threading;
namespace ConsoleApp4
{
class Program
{
static void Main(string[] args)
{
IWebDriver driver = new ChromeDriver();
Actions actions = new Actions(driver);
string[] elementIDs =
{
"Drag1",
"Drag2",
"Drag3",
"Drag4",
"Drag5"
};
driver.Navigate().GoToUrl("http://testing.todvachev.com/draganddrop/draganddrop.html");
IWebElement[] elements =
{
driver.FindElement(By.Id(elementIDs[0])),
driver.FindElement(By.Id(elementIDs[1])),
driver.FindElement(By.Id(elementIDs[2])),
driver.FindElement(By.Id(elementIDs[3])),
driver.FindElement(By.Id(elementIDs[4]))
};
MoveElementFromTo(actions, elements[0], elements[1], 0, 5);
Thread.Sleep(2000);
MoveElementFromTo(actions, elements[1], elements[0], 0, 5);
Thread.Sleep(2000);
MoveElementFromTo(actions, elements[2], elements[3], 0, 5);
Thread.Sleep(2000);
MoveElementFromTo(actions, elements[3], elements[1], 0, -5);
Thread.Sleep(5000);
driver.Quit();
}
static void MoveElementFromTo(Actions actions, IWebElement from, IWebElement to, int x, int y)
{
actions.ClickAndHold(from)
.MoveToElement(to)
.MoveByOffset(x, y)
.Release()
.Build().Perform();
}
}
}
Jimevans建议的解决方案就是每次通过新的动作类
MoveElementFromTo(new Actions(driver), elements[0], elements[1], 0, 5);
Thread.Sleep(2000);
MoveElementFromTo(new Actions(driver), elements[1], elements[0], 0, 5);
Thread.Sleep(2000);
MoveElementFromTo(new Actions(driver), elements[2], elements[3], 0, 5);
Thread.Sleep(2000);
MoveElementFromTo(new Actions(driver), elements[3], elements[1], 0, -5);