次のサイトにあるスライダーを動かすセレンスクリプトを作りたい
例の名前は、jQueryUIスライダーの向きを変更する方法です。
http://jqueryui.com/demos/slider/
どうすればいいのかわからない
次のサイトにあるスライダーを動かすセレンスクリプトを作りたい
例の名前は、jQueryUIスライダーの向きを変更する方法です。
http://jqueryui.com/demos/slider/
どうすればいいのかわからない
私はFranzEbnerの答えに相当するPythonを作成しました。それが誰かを助ける場合に備えて
注:Pythonでは、
find_element_by_XXXは、switch_to_frameを使用しない限り、フレーム内の要素を検出しません(他の言語については不明)
負の(-)オフセット値は期待どおりに機能しないため、メソッドに渡されたパーセンテージに基づいて計算されたオフセット値によってのみ移動します
def check(self, percent):
driver = self.driver
driver.get("http://jqueryui.com/demos/slider/");
driver.switch_to_frame(0)
driver.switch_to_active_element()
slidebar = driver.find_element_by_id("slider")
height = slidebar.size['height']
width = slidebar.size['width']
move = ActionChains(driver);
slider = driver.find_element_by_xpath("//div[@id='slider']/a")
if width > height:
//highly likely a horizontal slider
move.click_and_hold(slider).move_by_offset(percent * width / 100, 0).release().perform()
else:
//highly likely a vertical slider
move.click_and_hold(slider).move_by_offset(percent * height / 100, 0).release().perform()
driver.switch_to_default_content()
Action
インターフェイス を試したことはありますか?
特に「アクションチェーンの生成」のポイントはあなたを助けるはずです
/**
* Moves a jQuery slider to percental position, don't care about directions
* @param slider to move
* @param percent to set the slider
*/
public void moveSliderToPercent(WebElement slider, int percent){
Actions builder = new Actions(this.driver);
Action dragAndDrop;
int height = slider.getSize().getHeight();
int width = slider.getSize().getWidth();
if(width>height){
//high likely a horizontal slider
dragAndDrop = builder.clickAndHold(slider).moveByOffset(-(width/2),0).
moveByOffset((int)((width/100)*percent),0).
release().build();
}else{
//high likely a vertical slider
dragAndDrop = builder.clickAndHold(slider).moveByOffset(0, -(height/2)).
moveByOffset(0,(int)((height/100)*percent)).
release().build();
}
dragAndDrop.perform();
}
作業コード -
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();
アクション チェーンの生成
Actions チェーン ジェネレーターは Builder パターンを実装して、他のアクションのグループを含む CompositeAction を作成します。これにより、アクション チェーン ジェネレーター インスタンスを構成し、その build() メソッドを呼び出して複雑なアクションを取得することで、アクションのビルドが容易になります。
Actions builder = new Actions(driver);
Action dragAndDrop = builder.clickAndHold(someElement)
.moveToElement(otherElement)
.release(otherElement)
.build();
dragAndDrop.perform();
この状況では、次のコードを使用してスライダーを移動することをお勧めします-
Actions builder = new Actions(driver);
Action dragAndDrop =
builder.clickAndHold(someElement).moveByOffset(xOffset,yOffset).release().build();
dragAndDrop.perform();
この特定のケースでは、moveToElement(otherElement) を使用する代わりに、スライダーをオフセットで移動するのが理にかなっています。
これがお役に立てば幸いです。