2013-03-02 101 views
0

如何在水平進度條上滑動滑塊 URL:http://jqueryui.com/slider/ 我試着滾動滑塊,但它對我無效。使用Java我的代碼低於:如何在Selenium WebDriver中滑動{move}滑塊

public class TestClass 
{ 
    public static void main(String[] args) {   
    File file = new File("D:\\Driver\\IEDriverServer.exe"); 
    System.setProperty("webdriver.ie.driver", file.getAbsolutePath()); 
    WebDriver driver = new InternetExplorerDriver(); 
    driver.get("http://jqueryui.com/slider/"); 

    WebElement slider = driver.findElement(By.xpath("//div[@id='slider']/a")); 
    Actions move = new Actions(driver); 
    Action action = (Action) move.dragAndDropBy(slider, 30, 0).build(); 
    ((Actions) action).perform(); 

} 


} 

控制檯

Exception in thread "main" org.openqa.selenium.NoSuchElementException: Unable to find element with css selector == html body div#slider.ui-slider a.ui-slider-handle (WARNING: The server did not provide any stacktrace information) 
    Command duration or timeout: 286 milliseconds 
    For documentation on this error, please visit: http://seleniumhq.org/exceptions/no_such_element.html 
Build info: version: '2.25.0', revision: '17482', time: '2012-07-18 21:09:54' 
System info: os.name: 'Windows 7', os.arch: 'x86', os.version: '6.1', java.version: '1.7.0_13' 
Driver info: driver.version: RemoteWebDriver 
Session ID: 79edc751-a9a3-4ecb-a171-d2b43c088a66 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) 
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) 
at java.lang.reflect.Constructor.newInstance(Unknown Source) 
at org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:188) 
at org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:145) 
at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:498) 
at org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:268) 
at org.openqa.selenium.remote.RemoteWebDriver.findElementByCssSelector(RemoteWebDriver.java:345) 
at org.openqa.selenium.By$ByCssSelector.findElement(By.java:406) 
at org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:260) 
at testpakage.testclass.main(testclass.java:30) 
+0

控制檯錯誤似乎是webelement定位錯了 – 2016-04-26 12:21:14

回答

6

嘗試下面的代碼。它爲我工作。

public class TestClass 
    { 
     public static void main(String[] args) {   
     File file = new File("D:\\Driver\\IEDriverServer.exe"); 
     System.setProperty("webdriver.ie.driver", file.getAbsolutePath()); 
     WebDriver driver = new InternetExplorerDriver(); 
     driver.get("http://jqueryui.com/slider/"); 

     WebDriver driver = new InternetExplorerDriver(); 
     driver.get("http://jqueryui.com/slider/"); 
     driver.switchTo().frame(0); //need to switch to this frame before clicking the slider 
     WebElement slider = driver.findElement(By.xpath("//div[@id='slider']/span")); 
     Actions move = new Actions(driver); 
     Action action = (Action) move.dragAndDropBy(slider, 30, 0).build(); 
     action.perform(); 
    } 
+0

代碼沒有工作,那麼給錯誤: '信息:重試請求的線程 異常「主「java.lang.ClassCastException:org.openqa.selenium.interactions.CompositeAction不能轉換爲javax.swing.Action \t at testpakage.testclass.main(testclass.java:33)' – 2013-03-02 11:44:06

+0

是的。它也給我錯誤。請將最後一行更改爲action.perform();而不是((Actions)action).perform(); – Hemanth 2013-03-02 12:07:45

1

我只是嘗試另一種方式來處理滑塊。

我的代碼:

public void sliderCode(int iSliderAdjustValue){ 
    File file = new File("D:\\Driver\\IEDriverServer.exe"); 
    System.setProperty("webdriver.ie.driver", file.getAbsolutePath()); 
    WebDriver driver = new InternetExplorerDriver(); 
    driver.get("http://jqueryui.com/slider/"); 

    WebDriver driver = new InternetExplorerDriver(); 
    driver.get("http://jqueryui.com/slider/"); 
    driver.switchTo().frame(0); //need to switch to this frame before clicking the slider 
    WebElement slider = driver.findElement(By.xpath("//div[@id='slider']/a")); 
    Actions builder= new Actions(driver); 
    int iCount = 0; 
    if (iRange > 0) { 
    for(iCount = 0; iCount < iRange; iCount++) { 
    builder.moveToElement(slider).click(slider).sendKeys(Keys.ARROW_UP).perform(); 
       } 
    } else { 
    for (iCount = 0; iCount > iRange; iCount--) { 
    builder.click(slider).sendKeys(Keys.ARROW_DOWN) .perform(); 
    } 
    } 
     } 
0

此代碼工作完全正常,我 它處理網站的滑塊:homeshop18.com 嘗試這個代碼:

WebDriver driver = new FirefoxDriver(); 
driver.get("http://www.homeshop18.com/fashion-jewellery/category:15143/filter_Theme:%28%22Traditional+Wear%22+%22Cuff+%26+Kada%22+%22Daily+Wear%22+%22Maang+Tikka%22+%22Openable+Round%22+%22Round%22+%22Openable+Oval%22%29/sort:Popularity/inStock:true/?it_category=HP&it_action=JW-HPSP01&it_label=HP-HPSP01-131021235900-PD-JW-ZC-VK-SC_DiwaliFestWeddingJewellery&it_value=0"); 

WebElement Slider = driver.findElement(By.xpath("//*[@id='slider-range']/a[1]")); 
Thread.sleep(3000); 

Actions moveSlider = new Actions(driver); 
Action action = moveSlider.dragAndDropBy(Slider, 30, 0).build(); 

action.perform(); 
0

使用此代碼

Actions dragger = new Actions(driver); 
WebElement draggablePartOfScrollbar = driver.findElement(By.xpath("**xpath of slider**")); 
int numberOfPixelsToDragTheScrollbarDown = 5000; 
dragger.moveToElement(draggablePartOfScrollbar).clickAndHold().moveByOffset(0,numberOfPixelsToDragTheScrollbarDown).release().perform(); 
0

使用CSS將是很好這裏

public class testclass 

{ 

    public static void main(String[] args) 

    {   


    File file = new File("D:\\Driver\\IEDriverServer.exe"); 

    System.setProperty("webdriver.ie.driver", file.getAbsolutePath()); 
    WebDriver driver = new InternetExplorerDriver(); 
    driver.get("http://jqueryui.com/slider/"); 

    WebElement slider = driver.findElement(By.cssSelector("css=div#slider > a")); 
    Actions move = new Actions(driver); 
    Action action = (Action) move.dragAndDropBy(slider, 30, 0).build(); 
    ((Actions) action).perform(); 

} 

} 
0

我認爲幻燈片是使用CSS樣式的格式滾動 所以我們改變元素的樣式

JavascriptExecutor js = (JavascriptExecutor) driver; 

WebElement a = driver.findElement(By.xpath("//div[@id='slider-1']/a")); 

js.executeScript("arguments[0].setAttribute('style', 'left: 30%;')",a); 
+0

當您不想使用兩個偏移量移動時,此解決方案非常有用,謝謝。 – gouessej 2016-06-06 13:38:40

+0

我懷疑它真的編輯了價值。 – Nakilon 2016-08-23 11:23:04

5

嘗試的SendKeys!

public class TestClass 
{ 
    public static void main(String[] args) {   
    File file = new File("D:\\Driver\\IEDriverServer.exe"); 
    System.setProperty("webdriver.ie.driver", file.getAbsolutePath()); 
    WebDriver driver = new InternetExplorerDriver(); 
    driver.get("http://jqueryui.com/slider/"); 

    WebElement slider = driver.findElement(By.xpath("//div[@id='slider']/a")); 

    for (int i = 1; i <= "how many times you want" ; i++) { 
      slider.sendKeys(Keys.ARROW_RIGHT); 
     } 

} 


} 
0
//Try this code 
WebElement e = driver.findElement(By.className("Class name of Dragger")); 
Actions move = new Actions(driver); 
move.moveToElement(e).clickAndHold().moveByOffset(0,250).release().perform(); 
Thread.sleep(3500); 
+0

儘管這個鏈接可能回答這個問題,但最好在這裏包含答案的基本部分,並提供供參考的鏈接。如果鏈接頁面更改,則僅鏈接答案可能會失效。 - [來自評論](/ review/low-quality-posts/18069689) – 2017-11-27 03:34:04

0
package UKRTEST; 

    import java.util.concurrent.TimeUnit; 

    import org.openqa.selenium.By; 
    import org.openqa.selenium.Dimension; 
    import org.openqa.selenium.WebDriver; 

    import org.openqa.selenium.WebElement; 
    import org.openqa.selenium.chrome.ChromeDriver; 

    import org.openqa.selenium.interactions.Actions; 

    public class Ex_DragndDrop { 

    public static void main(String[] args) throws InterruptedException { 

    WebDriver driver; 
    System.setProperty("webdriver.chrome.driver", "E:\\Chrome Driver\\chromedriver.exe"); 
    driver = new ChromeDriver(); 

    String URL = "http://www.seleniumeasy.com/test/drag-drop-range-sliders-demo.html"; 

    driver.get(URL); 

    driver.manage().window().maximize(); 

    driver.manage().timeouts().implicitlyWait(10000, TimeUnit.MILLISECONDS); 

    Thread.sleep(3000); 
    Actions builder = new Actions(driver); 

    WebElement draggablePartOfScrollbar = driver 
      .findElement(By.xpath("/html/body/div[2]/div/div[2]/section/div[1]/div[1]/div/input")); 
    // To get pixel count of Slider X axis and Y axis(267,25) 

    Dimension sliderWidth = draggablePartOfScrollbar.getSize(); 
    System.out.println(sliderWidth); 

    // We need to give below value in +00 to move slider to 50 and +130 to move slider to 100,-100 to move slider to 12 
    int numberOfRangeToDragTheSlider = -100; 
    builder.moveToElement(draggablePartOfScrollbar).clickAndHold().moveByOffset(numberOfRangeToDragTheSlider, 0) 
      .release().perform(); 

} 

}