有人知道如何使用selenium DragAndDrop这个规范(noUiSlider)吗?

时间:2017-09-27 22:08:19

标签: c# selenium drag-and-drop slider action

我正在尝试使用以下代码移动带有Selenium Webdriver的滑块,但没有任何反应。我尝试了相同的代码用于不同的滑块,它的工作原理。滑块位于("Range")https://refreshless.com/nouislider/slider-values/

我使用的是浏览器Chrome,Selenium v​​3.6.0

我怎样才能移动滑块?

        IWebElement knob = driver.FindElement(By.XPath("/html/body/div[2]/section[3]/div[1]/div/div/div/div/div"));

        //try1
        Actions a1 = new Actions(driver);
        a1.DragAndDropToOffset(knob, 30, 0).Build().Perform();
        //try2
        Actions a2 = new Actions(driver);
        a2.ClickAndHold(knob).MoveByOffset(30, 0).Release().Build().Perform();

1 个答案:

答案 0 :(得分:1)

您可以使用的一种方法是只需单击要设置的位置的滑块。

由于您可能会重复使用此代码,因此我会将其放在函数中。该函数将接受要单击的元素(滑块)以及要单击的相对位置。想象相对位置,如%... 0.5是中途,0.1是1/10,依此类推。该函数只获取元素的宽度,然后将%应用于宽度以获得水平单击的位置。垂直位置只是元素高度的一半(所以你在垂直方向中间点击)。

static void SetRange(IWebElement e, double range)
{
    int point = (int)(e.Size.Width * range);
    new Actions(Driver).MoveToElement(e, point, e.Size.Height / 2).Click().Build().Perform();
}

要调用它,只需使用

SetRange(Driver.FindElement(By.Id("slider-range")), 0.1); // 0.1 is 10%
SetRange(Driver.FindElement(By.Id("slider-range")), 0.5); // 0.5 is 50% or halfway