2012-08-15 38 views
2

我想記錄slider captcha給我們的客戶網站。無法使用Selenium Webdrive控制滑塊captcha jquery?

我們已接到命名爲http://www.fmylife.com/signup

其他網站這個概念這有滑塊驗證碼註冊

我嘗試使用硒的webdriver行動建設者

public class TestFmylife { 
    WebDriver driver; 
    Selenium selenium; 

    @BeforeMethod 
    public void startSelenium() { 
     driver = new FirefoxDriver(); 
     selenium = new WebDriverBackedSelenium(driver, "http://www.fmylife.com/"); 
     driver.manage().window().maximize(); 
    } 

    @AfterMethod 
    public void stopSelenium() { 
     driver.close(); 
    } 

    @Test 
    public void testFmylife() { 
     selenium.open("/"); 
     selenium.click("link=Sign up"); 
     selenium.waitForPageToLoad("30000"); 
     selenium.type("name=login", "testfmylife"); 
     selenium.type("name=pass", "[email protected]"); 
     selenium.type("name=passc", "[email protected]"); 
     selenium.type("name=mail", "[email protected]"); 

     Point MyPoint= driver.findElement(By.xpath("//*[@id='bgSlider']")).getLocation(); 

     WebElement someElement = driver.findElement(By.xpath("//*[@id='bgSlider']")); 

     System.out.println(MyPoint.x+"--------"+MyPoint.y); 


     Actions builder = new Actions(driver); 

     Action dragAndDrop = builder.clickAndHold(someElement).moveByOffset(MyPoint.x,(MyPoint.y + 100)).release().build(); 

     dragAndDrop.perform(); 

     selenium.click("css=div.form > div.ok > input[type=\"submit\"]"); 
    } 
} 

但我不能使用此代碼

幫助移動滑塊我排序了這一點

回答

0

我使用的操作類的dragAndDropBy方法(java.lang.Object中 org.openqa.selenium.interactions.Actions)和水平地移動通過200點滑塊。請把下面的代碼一試:

WebDriver driver = new FirefoxDriver(); 
driver.get("http://www.fmylife.com/signup"); 
WebElement slider = driver.findElement(By.xpath(".//*[@id='Slider']")); 
Actions builder = new Actions (driver); 
builder.dragAndDropBy(slider, 200, 0).build().perform(); 
+0

是在你的系統中這方面的工作?它不是在我的系統工作 – 2012-08-16 07:15:10

0
Actions builder = new Actions(driver); 

Action dragAndDrop = builder.clickAndHold(someElement) 
    .moveToElement(otherElement) 
    .release(otherElement) 
    .build(); 

dragAndDrop.perform(); 

更可以在這裏找到 - http://code.google.com/p/selenium/wiki/AdvancedUserInteractions

您可以使用定位如下 -

String xto=Integer.toString(LocatorTo.getLocation().x); 
String yto=Integer.toString(LocatorTo.getLocation().y); 

工作代碼 -

WebDriver driver = new InternetExplorerDriver(); 
driver.get("http://jqueryui.com/demos/slider/"); 
//Identify WebElement 
WebElement slider = driver.findElement(By.xpath("//div[@id='slider']/a")); 

//Using Action Class 
Actions move = new Actions(driver); 
Action action = move.dragAndDropBy(slider, 30, 0).build(); 
action.perform(); 

driver.quit(); 

來源 - https://gist.github.com/2497551

+0

我已經嘗試了所有上述解決方案,但這些都不工作。請你可以在你的電腦上試試它,併發送給我所有的東西? – 2012-08-22 05:45:55

0

如果您的滑塊等礦

enter image description here

具有「滑塊句柄」(一個<一個/>標記具有值「5英尺5」的框)一個「滑塊軌道」內(一< div>標籤的黑色長條),然後將下面的代碼將在C#將致力於移動滑塊手柄沿所述滑塊軌道的百分比。

public void SetSliderPercentage(string sliderHandleXpath, string sliderTrackXpath, int percentage) 
{ 
    var sliderHandle = driver.FindElement(By.XPath(sliderHandleXpath)); 
    var sliderTrack = driver.FindElement(By.XPath(sliderTrackXpath)); 
    var width = int.Parse(sliderTrack.GetCssValue("width").Replace("px", "")); 
    var dx = (int)(percentage/100.0 * width); 
    new Actions(driver) 
       .DragAndDropToOffset(sliderHandle, dx, 0) 
       .Build() 
       .Perform(); 
}