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