单个测试脚本中的多个交互导致总结操作
Multiple Interaction in a single test script result into summing up the actions
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using OpenQA.Selenium.Interactions;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace Basics._03_Basic_Function
{
class Slider
{
[Test]
public void Test_Slider()
{
ChromeOptions options = new ChromeOptions();
IWebDriver driver = new ChromeDriver(options);
driver.Manage().Window.Maximize();
driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(2);
driver.Navigate().GoToUrl("https://jqueryui.com/slider/");
IWebElement slderFrame = driver.FindElement(By.XPath("//iframe[@class='demo-frame']"));
driver.SwitchTo().Frame(slderFrame);
Thread.Sleep(2500);
Actions action = new Actions(driver);
// Offset 1 to Move Slider by 30
IWebElement slider = driver.FindElement(By.XPath("//*[@id='slider']/span[1]"));
action.DragAndDropToOffset(slider, 30, 0).Build().Perform();
Thread.Sleep(2500);
// Offset 2 to Move Slider by 30
action.DragAndDropToOffset(slider, 30, 0).Build().Perform();
Thread.Sleep(2500);
// Offset 3 to Move Slider by 30
action.DragAndDropToOffset(slider, 30, 0).Build().Perform();
Thread.Sleep(2500);
driver.Close();
driver.Quit();
}
}
}
问题:上面的测试脚本中有3个交互
偏移量 1 -> *将滑块移动一次 30 *
偏移量 2 -> 将滑块移动两次,每次移动 30(总移动 60)
偏移量 3 -> 将滑块移动三次,每次移动 30(总移动 90)
为什么要总结这些动作??
总结一下如何保护??
下面的代码工作正常。每次执行后释放动作
using NUnit.Framework;
using OpenQA.Selenium.Chrome;
using OpenQA.Selenium.Interactions;
using OpenQA.Selenium;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace Basics._03_Basic_Function
{
[Category("03 Basic Function")]
class SliderTest
{
[Test]
public void Test_Slider()
{
ChromeOptions options = new ChromeOptions();
IWebDriver driver = new ChromeDriver(options);
driver.Manage().Window.Maximize();
driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(2);
driver.Navigate().GoToUrl("https://jqueryui.com/slider/");
IWebElement slderFrame = driver.FindElement(By.XPath("//iframe[@class='demo-frame']"));
driver.SwitchTo().Frame(slderFrame);
Thread.Sleep(2500);
Actions action = new Actions(driver);
// Offset 1 to Move Slider by 30
IWebElement slider = driver.FindElement(By.XPath("//*[@id='slider']/span[1]"));
action.DragAndDropToOffset(slider, 30, 0).Perform();
action.Release();
Thread.Sleep(2500);
// Offset 2 to Move Slider by 30
action = new Actions(driver);
action.DragAndDropToOffset(slider, 30, 0).Perform();
action.Release();
Thread.Sleep(2500);
// Offset 3 to Move Slider by 30
action = new Actions(driver);
action.DragAndDropToOffset(slider, 30, 0).Perform();
Thread.Sleep(2500);
driver.Close();
driver.Quit();
}
}
}
另一个解决方案:创建 Actions
class 没有引用对象的对象:
IWebElement slider = driver.FindElement(By.XPath("//*[@id='slider']/span[1]"));
// Offset 1 to Move Slider by 30
new Actions(driver).DragAndDropToOffset(slider, sliderOffsetX, 0).Perform();
Thread.Sleep(1000);
// Offset 2 to Move Slider by 30
new Actions(driver).DragAndDropToOffset(slider, sliderOffsetX, 0).Perform();
Thread.Sleep(1000);
// Offset 3 to Move Slider by 30
new Actions(driver).DragAndDropToOffset(slider, sliderOffsetX, 0).Perform();
Thread.Sleep(1000);
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using OpenQA.Selenium.Interactions;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace Basics._03_Basic_Function
{
class Slider
{
[Test]
public void Test_Slider()
{
ChromeOptions options = new ChromeOptions();
IWebDriver driver = new ChromeDriver(options);
driver.Manage().Window.Maximize();
driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(2);
driver.Navigate().GoToUrl("https://jqueryui.com/slider/");
IWebElement slderFrame = driver.FindElement(By.XPath("//iframe[@class='demo-frame']"));
driver.SwitchTo().Frame(slderFrame);
Thread.Sleep(2500);
Actions action = new Actions(driver);
// Offset 1 to Move Slider by 30
IWebElement slider = driver.FindElement(By.XPath("//*[@id='slider']/span[1]"));
action.DragAndDropToOffset(slider, 30, 0).Build().Perform();
Thread.Sleep(2500);
// Offset 2 to Move Slider by 30
action.DragAndDropToOffset(slider, 30, 0).Build().Perform();
Thread.Sleep(2500);
// Offset 3 to Move Slider by 30
action.DragAndDropToOffset(slider, 30, 0).Build().Perform();
Thread.Sleep(2500);
driver.Close();
driver.Quit();
}
}
}
问题:上面的测试脚本中有3个交互
偏移量 1 -> *将滑块移动一次 30 *
偏移量 2 -> 将滑块移动两次,每次移动 30(总移动 60)
偏移量 3 -> 将滑块移动三次,每次移动 30(总移动 90)
为什么要总结这些动作?? 总结一下如何保护??
下面的代码工作正常。每次执行后释放动作
using NUnit.Framework;
using OpenQA.Selenium.Chrome;
using OpenQA.Selenium.Interactions;
using OpenQA.Selenium;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace Basics._03_Basic_Function
{
[Category("03 Basic Function")]
class SliderTest
{
[Test]
public void Test_Slider()
{
ChromeOptions options = new ChromeOptions();
IWebDriver driver = new ChromeDriver(options);
driver.Manage().Window.Maximize();
driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(2);
driver.Navigate().GoToUrl("https://jqueryui.com/slider/");
IWebElement slderFrame = driver.FindElement(By.XPath("//iframe[@class='demo-frame']"));
driver.SwitchTo().Frame(slderFrame);
Thread.Sleep(2500);
Actions action = new Actions(driver);
// Offset 1 to Move Slider by 30
IWebElement slider = driver.FindElement(By.XPath("//*[@id='slider']/span[1]"));
action.DragAndDropToOffset(slider, 30, 0).Perform();
action.Release();
Thread.Sleep(2500);
// Offset 2 to Move Slider by 30
action = new Actions(driver);
action.DragAndDropToOffset(slider, 30, 0).Perform();
action.Release();
Thread.Sleep(2500);
// Offset 3 to Move Slider by 30
action = new Actions(driver);
action.DragAndDropToOffset(slider, 30, 0).Perform();
Thread.Sleep(2500);
driver.Close();
driver.Quit();
}
}
}
另一个解决方案:创建 Actions
class 没有引用对象的对象:
IWebElement slider = driver.FindElement(By.XPath("//*[@id='slider']/span[1]"));
// Offset 1 to Move Slider by 30
new Actions(driver).DragAndDropToOffset(slider, sliderOffsetX, 0).Perform();
Thread.Sleep(1000);
// Offset 2 to Move Slider by 30
new Actions(driver).DragAndDropToOffset(slider, sliderOffsetX, 0).Perform();
Thread.Sleep(1000);
// Offset 3 to Move Slider by 30
new Actions(driver).DragAndDropToOffset(slider, sliderOffsetX, 0).Perform();
Thread.Sleep(1000);