スクロールホイール操作
ページ上のスクロールには5つのシナリオがあります。
要素までスクロール
これは最も一般的なシナリオです。従来のマウスのクリックやキー入力メソッドとは異なり、actions クラスはターゲット要素を自動的にビューにスクロールしないため、要素がまだビューポート内にない場合はこのメソッドを使用する必要があります。
このメソッドは、ウェブ要素を唯一の引数として取ります。
要素が現在の画面の上にあるか下にあるかに関わらず、ビューポートは要素の下部が画面の下部にくるようにスクロールされます。
WebElement iframe = driver.findElement(By.tagName("iframe"));
new Actions(driver)
.scrollToElement(iframe)
.perform();
iframe = driver.find_element(By.TAG_NAME, "iframe")
ActionChains(driver)\
.scroll_to_element(iframe)\
.perform()
IWebElement iframe = driver.FindElement(By.TagName("iframe"));
new Actions(driver)
.ScrollToElement(iframe)
.Perform();
iframe = driver.find_element(tag_name: 'iframe')
driver.action
.scroll_to(iframe)
.perform
const iframe = await driver.findElement(By.css("iframe"))
await driver.actions()
.scroll(0, 0, 0, 0, iframe)
.perform()
val iframe = driver.findElement(By.tagName("iframe"))
Actions(driver)
.scrollToElement(iframe)
.perform()
指定された量だけスクロール
これは2番目に一般的なスクロールのシナリオです。右方向と下方向にスクロールする量を表す delta x 値と delta y 値を渡します。負の値はそれぞれ左方向と上方向を表します。
WebElement footer = driver.findElement(By.tagName("footer"));
int deltaY = footer.getRect().y;
new Actions(driver)
.scrollByAmount(0, deltaY)
.perform();
footer = driver.find_element(By.TAG_NAME, "footer")
delta_y = footer.rect['y']
ActionChains(driver)\
.scroll_by_amount(0, delta_y)\
.perform()
IWebElement footer = driver.FindElement(By.TagName("footer"));
int deltaY = footer.Location.Y;
new Actions(driver)
.ScrollByAmount(0, deltaY)
.Perform();
footer = driver.find_element(tag_name: 'footer')
delta_y = footer.rect.y
driver.action
.scroll_by(0, delta_y)
.perform
const footer = await driver.findElement(By.css("footer"))
const deltaY = (await footer.getRect()).y
await driver.actions()
.scroll(0, 0, 0, deltaY)
.perform()
val footer = driver.findElement(By.tagName("footer"))
val deltaY = footer.getRect().y
Actions(driver)
.scrollByAmount(0, deltaY)
.perform()
要素から指定された量だけスクロール
このシナリオは、事実上、上記の2つの方法の組み合わせです。
これを実行するには、3つの引数を取る「Scroll From」メソッドを使用します。最初の引数は起点を示し、要素として指定し、2番目と3番目の引数は delta x 値と delta y 値です。
要素がビューポート外にある場合、画面の下部までスクロールされ、その後、ページが指定された delta x 値と delta y 値でスクロールされます。
WebElement iframe = driver.findElement(By.tagName("iframe"));
WheelInput.ScrollOrigin scrollOrigin = WheelInput.ScrollOrigin.fromElement(iframe);
new Actions(driver)
.scrollFromOrigin(scrollOrigin, 0, 200)
.perform();
iframe = driver.find_element(By.TAG_NAME, "iframe")
scroll_origin = ScrollOrigin.from_element(iframe)
ActionChains(driver)\
.scroll_from_origin(scroll_origin, 0, 200)\
.perform()
IWebElement iframe = driver.FindElement(By.TagName("iframe"));
WheelInputDevice.ScrollOrigin scrollOrigin = new WheelInputDevice.ScrollOrigin
{
Element = iframe
};
new Actions(driver)
.ScrollFromOrigin(scrollOrigin, 0, 200)
.Perform();
iframe = driver.find_element(tag_name: 'iframe')
scroll_origin = Selenium::WebDriver::WheelActions::ScrollOrigin.element(iframe)
driver.action
.scroll_from(scroll_origin, 0, 200)
.perform
const iframe = await driver.findElement(By.css("iframe"))
await driver.actions()
.scroll(0, 0, 0, 200, iframe)
.perform()
val iframe = driver.findElement(By.tagName("iframe"))
val scrollOrigin = WheelInput.ScrollOrigin.fromElement(iframe)
Actions(driver)
.scrollFromOrigin(scrollOrigin, 0, 200)
.perform()
オフセットを持つ要素からスクロール
このシナリオは、画面の一部のみをスクロールする必要があり、それがビューポート外にある場合に使用されます。または、ビューポート内にあり、スクロールする必要がある画面の部分が特定の要素から既知のオフセットだけ離れている場合にも使用されます。
これは再び「Scroll From」メソッドを使用し、要素を指定することに加えて、スクロールの原点を指示するためにオフセットが指定されます。オフセットは、指定された要素の中心から計算されます。
要素がビューポート外にある場合、まず画面の下部までスクロールされ、次にスクロールの原点が要素の中心の座標にオフセットを加えることによって決定され、最後にページが指定された delta x 値と delta y 値でスクロールされます。
要素の中心からのオフセットがビューポート外になる場合、例外が発生することに注意してください。
WebElement footer = driver.findElement(By.tagName("footer"));
WheelInput.ScrollOrigin scrollOrigin = WheelInput.ScrollOrigin.fromElement(footer, 0, -50);
new Actions(driver)
.scrollFromOrigin(scrollOrigin,0, 200)
.perform();
footer = driver.find_element(By.TAG_NAME, "footer")
scroll_origin = ScrollOrigin.from_element(footer, 0, -50)
ActionChains(driver)\
.scroll_from_origin(scroll_origin, 0, 200)\
.perform()
IWebElement footer = driver.FindElement(By.TagName("footer"));
var scrollOrigin = new WheelInputDevice.ScrollOrigin
{
Element = footer,
XOffset = 0,
YOffset = -50
};
new Actions(driver)
.ScrollFromOrigin(scrollOrigin, 0, 200)
.Perform();
footer = driver.find_element(tag_name: 'footer')
scroll_origin = Selenium::WebDriver::WheelActions::ScrollOrigin.element(footer, 0, -50)
driver.action
.scroll_from(scroll_origin, 0, 200)
.perform
const footer = await driver.findElement(By.css("footer"))
await driver.actions()
.scroll(0, -50, 0, 200, footer)
.perform()
val footer = driver.findElement(By.tagName("footer"))
val scrollOrigin = WheelInput.ScrollOrigin.fromElement(footer, 0, -50)
Actions(driver)
.scrollFromOrigin(scrollOrigin,0, 200)
.perform()
原点(要素)のオフセットから指定された量だけスクロール
最後のシナリオは、画面の一部のみをスクロールする必要があり、それがすでにビューポート内にある場合に使用されます。
これは再び「Scroll From」メソッドを使用しますが、要素の代わりにビューポートが指定されます。オフセットは、現在のビューポートの左上隅から指定されます。原点が決定された後、ページは指定された delta x 値と delta y 値でスクロールされます。
ビューポートの左上隅からのオフセットが画面外になる場合、例外が発生することに注意してください。
WheelInput.ScrollOrigin scrollOrigin = WheelInput.ScrollOrigin.fromViewport(10, 10);
new Actions(driver)
.scrollFromOrigin(scrollOrigin, 0, 200)
.perform();
scroll_origin = ScrollOrigin.from_viewport(10, 10)
ActionChains(driver)\
.scroll_from_origin(scroll_origin, 0, 200)\
.perform()
var scrollOrigin = new WheelInputDevice.ScrollOrigin
{
Viewport = true,
XOffset = 10,
YOffset = 10
};
new Actions(driver)
.ScrollFromOrigin(scrollOrigin, 0, 200)
.Perform();
scroll_origin = Selenium::WebDriver::WheelActions::ScrollOrigin.viewport(10, 10)
driver.action
.scroll_from(scroll_origin, 0, 200)
.perform
await driver.actions()
.scroll(10, 10, 0, 200)
.perform()
val scrollOrigin = WheelInput.ScrollOrigin.fromViewport(10, 10)
Actions(driver)
.scrollFromOrigin(scrollOrigin, 0, 200)
.perform()