Skip to content

Commit e1c8f7f

Browse files
committed
[dotnet] use convenience methods for scrolling
1 parent 405d40f commit e1c8f7f

3 files changed

Lines changed: 67 additions & 28 deletions

File tree

dotnet/src/webdriver/Interactions/Actions.cs

Lines changed: 33 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -406,21 +406,46 @@ public Actions DragAndDropToOffset(IWebElement source, int offsetX, int offsetY)
406406
}
407407

408408
/// <summary>
409-
/// Scrolls by the provided amount from a designated origination point.
409+
/// If the element is outside the viewport, scrolls the bottom of the element to the bottom of the viewport.
410+
/// </summary>
411+
/// <param name="element">Which element to scroll into the viewport.</param>
412+
/// <returns>A self-reference to this <see cref="Actions"/>.</returns>
413+
public Actions ScrollToElement(IWebElement element)
414+
{
415+
WheelInputDevice wheel = new WheelInputDevice();
416+
this.actionBuilder.AddAction(wheel.CreateWheelScroll(element, 0, 0, 0, 0, DefaultScrollDuration));
417+
418+
return this;
419+
}
420+
421+
/// <summary>
422+
/// Scrolls by provided amounts with the origin in the top left corner of the viewport.
423+
/// </summary>
424+
/// <param name="deltaX">Distance along X axis to scroll using the wheel. A negative value scrolls left.</param>
425+
/// <param name="deltaY">Distance along Y axis to scroll using the wheel. A negative value scrolls up.</param>
426+
/// <returns>A self-reference to this <see cref="Actions"/>.</returns>
427+
public Actions ScrollByAmount(int deltaX, int deltaY)
428+
{
429+
WheelInputDevice wheel = new WheelInputDevice();
430+
this.actionBuilder.AddAction(wheel.CreateWheelScroll(deltaX, deltaY, DefaultScrollDuration));
431+
432+
return this;
433+
}
434+
435+
/// <summary>
436+
/// Scrolls by provided amount based on a provided origin.
410437
/// </summary>
411438
/// <remarks>
412439
/// The scroll origin is either the center of an element or the upper left of the viewport plus any offsets.
413440
/// If the origin is an element, and the element is not in the viewport, the bottom of the element will first
414441
/// be scrolled to the bottom of the viewport.
415442
/// </remarks>
416-
/// <param name="xOffset">The horizontal offset from the origin from which to start the scroll.</param>
417-
/// <param name="yOffset">The vertical offset from the origin from which to start the scroll.</param>
443+
/// <param name="scrollOrigin">Where scroll originates (viewport or element center) plus provided offsets.</param>
418444
/// <param name="deltaX">Distance along X axis to scroll using the wheel. A negative value scrolls left.</param>
419445
/// <param name="deltaY">Distance along Y axis to scroll using the wheel. A negative value scrolls up.</param>
420-
/// <param name="scrollOrigin">Where scroll originates (viewport or element center).</param>
421446
/// <returns>A self-reference to this <see cref="Actions"/>.</returns>
422-
/// <exception cref="MoveTargetOutOfBoundsException">If origin plus offsets is outside viewport.</exception>
423-
public Actions Scroll(int xOffset, int yOffset, int deltaX, int deltaY, WheelInputDevice.ScrollOrigin scrollOrigin)
447+
/// <exception cref="MoveTargetOutOfBoundsException">If the origin with offset is outside the viewport.</exception>
448+
public Actions ScrollFromOrigin(WheelInputDevice.ScrollOrigin scrollOrigin, int deltaX, int deltaY)
424449
{
425450
WheelInputDevice wheel = new WheelInputDevice();
426451

@@ -432,12 +457,12 @@ public Actions Scroll(int xOffset, int yOffset, int deltaX, int deltaY, WheelInp
432457
if (scrollOrigin.Viewport)
433458
{
434459
this.actionBuilder.AddAction(wheel.CreateWheelScroll(CoordinateOrigin.Viewport,
435-
xOffset, yOffset, deltaX, deltaY, DefaultScrollDuration));
460+
scrollOrigin.XOffset, scrollOrigin.YOffset, deltaX, deltaY, DefaultScrollDuration));
436461
}
437462
else
438463
{
439464
this.actionBuilder.AddAction(wheel.CreateWheelScroll(scrollOrigin.Element,
440-
xOffset, yOffset, deltaX, deltaY, DefaultScrollDuration));
465+
scrollOrigin.XOffset, scrollOrigin.YOffset, deltaX, deltaY, DefaultScrollDuration));
441466
}
442467

443468
return this;

dotnet/src/webdriver/Interactions/WheelInputDevice.cs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,8 @@ public class ScrollOrigin
112112
{
113113
private IWebElement element;
114114
private bool viewport;
115+
private int xOffset = 0;
116+
private int yOffset = 0;
115117

116118
public IWebElement Element
117119
{
@@ -124,6 +126,19 @@ public bool Viewport
124126
get { return this.viewport; }
125127
set { this.viewport = value; }
126128
}
129+
130+
public int XOffset
131+
{
132+
get { return this.xOffset; }
133+
set { this.xOffset = value; }
134+
}
135+
136+
public int YOffset
137+
{
138+
get { return this.yOffset; }
139+
set { this.yOffset = value; }
140+
}
141+
127142
}
128143

129144
private class WheelScrollInteraction : Interaction

dotnet/test/common/Interactions/BasicWheelInterfaceTest.cs

Lines changed: 19 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -26,12 +26,7 @@ public void ShouldAllowScrollingToAnElement()
2626

2727
Assert.IsFalse(IsInViewport(iframe));
2828

29-
var scrollOrigin = new WheelInputDevice.ScrollOrigin
30-
{
31-
Element = iframe
32-
};
33-
34-
new Actions(driver).Scroll(0, 0, 0, 0, scrollOrigin).Build().Perform();
29+
new Actions(driver).ScrollToElement(iframe).Build().Perform();
3530

3631
Assert.IsTrue(IsInViewport(iframe));
3732
}
@@ -46,7 +41,7 @@ public void ShouldScrollFromElementByGivenAmount()
4641
Element = iframe
4742
};
4843

49-
new Actions(driver).Scroll(0, 0, 0, 200, scrollOrigin).Build().Perform();
44+
new Actions(driver).ScrollFromOrigin(scrollOrigin, 0, 200).Build().Perform();
5045

5146
driver.SwitchTo().Frame(iframe);
5247
IWebElement checkbox = driver.FindElement(By.Name("scroll_checkbox"));
@@ -60,10 +55,12 @@ public void ShouldAllowScrollingFromElementByGivenAmountWithOffset()
6055
IWebElement footer = driver.FindElement(By.TagName("footer"));
6156
var scrollOrigin = new WheelInputDevice.ScrollOrigin
6257
{
63-
Element = footer
58+
Element = footer,
59+
XOffset = 0,
60+
YOffset = -50
6461
};
6562

66-
new Actions(driver).Scroll(0, -50, 0, 200, scrollOrigin).Build().Perform();
63+
new Actions(driver).ScrollFromOrigin(scrollOrigin, 0, 200).Build().Perform();
6764

6865
IWebElement iframe = driver.FindElement(By.TagName("iframe"));
6966
driver.SwitchTo().Frame(iframe);
@@ -78,10 +75,12 @@ public void ShouldNotAllowScrollingWhenElementOriginOutOfViewport()
7875
IWebElement footer = driver.FindElement(By.TagName("footer"));
7976
var scrollOrigin = new WheelInputDevice.ScrollOrigin
8077
{
81-
Element = footer
78+
Element = footer,
79+
XOffset = 0,
80+
YOffset = 50
8281
};
8382

84-
Assert.That(() => new Actions(driver).Scroll(0, 50, 0, 0, scrollOrigin).Build().Perform(),
83+
Assert.That(() => new Actions(driver).ScrollFromOrigin(scrollOrigin, 0, 200).Build().Perform(),
8584
Throws.InstanceOf<MoveTargetOutOfBoundsException>());
8685
}
8786

@@ -91,12 +90,8 @@ public void ShouldAllowScrollingFromViewportByGivenAmount()
9190
driver.Url = scrollFrameOutOfViewport;
9291
IWebElement footer = driver.FindElement(By.TagName("footer"));
9392
int deltaY = footer.Location.Y;
94-
var scrollOrigin = new WheelInputDevice.ScrollOrigin
95-
{
96-
Viewport = true
97-
};
9893

99-
new Actions(driver).Scroll(0, 0, 0, deltaY, scrollOrigin).Build().Perform();
94+
new Actions(driver).ScrollByAmount(0, deltaY).Build().Perform();
10095

10196
Assert.IsTrue(IsInViewport(footer));
10297
}
@@ -107,10 +102,12 @@ public void ShouldAllowScrollingFromViewportByGivenAmountFromOrigin()
107102
driver.Url = scrollFrameInViewport;
108103
var scrollOrigin = new WheelInputDevice.ScrollOrigin
109104
{
110-
Viewport = true
105+
Viewport = true,
106+
XOffset = 10,
107+
YOffset = 10
111108
};
112109

113-
new Actions(driver).Scroll(10, 10, 0, 200, scrollOrigin).Build().Perform();
110+
new Actions(driver).ScrollFromOrigin(scrollOrigin, 0, 200).Build().Perform();
114111

115112
IWebElement iframe = driver.FindElement(By.TagName("iframe"));
116113
driver.SwitchTo().Frame(iframe);
@@ -124,10 +121,12 @@ public void ShouldNotAllowScrollingWhenOriginOffsetIsOutOfViewport()
124121
driver.Url = scrollFrameInViewport;
125122
var scrollOrigin = new WheelInputDevice.ScrollOrigin
126123
{
127-
Viewport = true
124+
Viewport = true,
125+
XOffset = -10,
126+
YOffset = -10
128127
};
129128

130-
Assert.That(() => new Actions(driver).Scroll(-10, -10, 0, 200, scrollOrigin).Build().Perform(),
129+
Assert.That(() => new Actions(driver).ScrollFromOrigin(scrollOrigin, 0, 200).Build().Perform(),
131130
Throws.InstanceOf<MoveTargetOutOfBoundsException>());
132131
}
133132

0 commit comments

Comments
 (0)