0

滑块设定值I有一个这样的滑块: enter image description here用于与硒的webdriver

它是由角JS写入,代码如下:

<div class="ng-isolate-scope" data-range-slider-directive="" data-model="dataModel" data-model-property="surroundingEvnt" data-floor-value="0" data-ceil-value="10" data-max-value-plus="true"> 
    <div class="rzslider ng-isolate-scope" data-rz-slider-model="model[modelProperty]" data-rz-slider-options="slider.options"> 
     <span class="rz-bar-wrapper"> 
     <span class="rz-pointer rz-pointer-min" ng-style="minPointerStyle" role="slider" aria-valuenow="0" aria-valuetext="0" aria-valuemin="0" aria-valuemax="10" tabindex="0" style="left: 0px;"></span> 
     // a lot of spans here    
    </div> 
</div> 

这是插件:https://github.com/angular-slider/angularjs-slider

我想单击以将滑块点滑动到该值,例如4或6.但我不知道如何移动滑块。任何人都可以有任何建议。我的测试是用Java编写的。谢谢

+1

您可以尝试使用'ActionChains'模块中的拖放式偏移方法 – Andersson

回答

1

你没有指定你想要的语言,所以我写了一些Java代码,希望你可以使用或适应。这个概念是获取滑块的容器元素,然后根据宽度的比例因子单击(一次)元素以获得所需的值。

我在this page上找到了一个angular.js滑块的例子,我用它来编写这段代码,它工作正常。首先,我们有一个函数可以设置该值并为滑块设置WebElement。该函数使用滑块元素的宽度和滑块的最小/最大值来确定比例,并单击正确的偏移量以设置正确的值。

/** 
* Sets the value on a horizontal angular.js slider 
* 
* @param value 
*   the desired value 
*/ 
public static void setHValue(WebElement slider, double value) 
{ 
    double minValue = Double.parseDouble(slider.getAttribute("min")); 
    double maxValue = Double.parseDouble(slider.getAttribute("max")); 
    int sliderH = slider.getSize().height; 
    int sliderW = slider.getSize().width; 
    System.out.println(sliderH); 
    System.out.println(sliderW); 
    Actions action = new Actions(driver); 
    action.moveToElement(slider, (int) (value * sliderW/(maxValue - minValue)), sliderH/2).click().build().perform(); 
} 

调用它看起来像这样。

driver.get("https://material.angularjs.org/latest/demo/slider"); 
WebElement slider = driver.findElement(By.id("red-slider")); 
setHValue(slider, 150); 

此滑块具有0-255的值的范围,从而得到的150所期望的值,我们得到从元件本身的最小值和最大值,然后确定基于的宽度为宽度的比例因子确定宽度偏移的元素。高度偏移量只是假定滑块位于元件中间的元件高度的一半。之后剩下的就是使用.moveToElement(toElement, xOffset, yOffset)方法Actions并单击正确的位置。

+0

Hi @JeffC,感谢您的详细解答。我用Java编写测试。我用你的答案,但不成功。就像你的代码和素材页面一样,滑块是一个元素,但在我的情况下,滑块位于data-floor-value =“0”的div中, -ceil-value =“10”,滑块点是一个角度=“slider”,aria-valuemin =“0”,aria-valuemax =“10”的跨度,就像我的问题一样。我调整了你的代码,一切都很好,我的最小值和最大值分别是0和10,但我总是在moveToElement处得到InvocationTargetException。 – Ragnarsson

+0

如果不能看到页面,就很难测试。你能链接页面还是至少在角度演示页面上找到相同或相似的示例滑块?一旦你传入包含'data-floor-value'和'data-ceil-value'的'div',并更新'minValue'和'maxValue'来拉取这些属性而不是'min'和'max',你应该很好。不要担心单击滑块本身(其中一个嵌套元素),只需单击其中一个容器...您只需通过反复试验找到合适的容器即可。 – JeffC

+0

谢谢JeffC。我只是问geckodriver球员(我正在使用geckodriver和FF 49.0.2),事实证明Selenium Actions API并未在geckodriver中实现,但!这就是为什么你的代码和我的适应不起作用的原因。所以,我会尝试使用Chrome,或尝试考虑另一种解决方法。谢谢你的帮助。 – Ragnarsson