Skip to content

Commit 19553d2

Browse files
authored
Merge pull request #37 from grokys/fixes/dpi-scaling
Make WebDriver DPI scaling-aware.
2 parents 4857093 + c0f876f commit 19553d2

File tree

9 files changed

+46
-9
lines changed

9 files changed

+46
-9
lines changed

src/FlaUI.WebDriver.UITests/ElementTests.cs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -212,14 +212,15 @@ public void GetElementRect_Default_IsSupported()
212212
using var driver = new RemoteWebDriver(WebDriverFixture.WebDriverUrl, driverOptions);
213213
var element = driver.FindElement(ExtendedBy.AccessibilityId("EditableCombo"));
214214

215+
var scaling = TestApplication.GetScaling(driver);
215216
var location = element.Location;
216217
var size = element.Size;
217218

218219
var windowLocation = driver.Manage().Window.Position;
219-
Assert.That(location.X, Is.InRange(windowLocation.X + 253, windowLocation.X + 257));
220-
Assert.That(location.Y, Is.InRange(windowLocation.Y + 132, windowLocation.Y + 136));
221-
Assert.That(size.Width, Is.EqualTo(120));
222-
Assert.That(size.Height, Is.EqualTo(22));
220+
Assert.That(location.X, Is.InRange(windowLocation.X + (253 * scaling), windowLocation.X + (257 * scaling)));
221+
Assert.That(location.Y, Is.InRange(windowLocation.Y + (132 * scaling), windowLocation.Y + (136 * scaling)));
222+
Assert.That(size.Width, Is.EqualTo(120 * scaling));
223+
Assert.That(size.Height, Is.EqualTo(22 * scaling));
223224
}
224225

225226
[TestCase("TextBox")]

src/FlaUI.WebDriver.UITests/TestUtil/TestApplication.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using System.IO;
22
using System.Linq;
3+
using OpenQA.Selenium.Remote;
34

45
namespace FlaUI.WebDriver.UITests.TestUtil
56
{
@@ -9,6 +10,11 @@ public static class TestApplication
910
private static readonly string s_currentDirectory = Directory.GetCurrentDirectory();
1011
private static readonly string s_solutionDirectory = FindSolutionDirectory(s_currentDirectory);
1112

13+
public static double GetScaling(RemoteWebDriver driver)
14+
{
15+
return double.Parse(driver.FindElement(ExtendedBy.AccessibilityId("DpiScaling")).Text.ToString());
16+
}
17+
1218
private static string FindSolutionDirectory(string currentDirectory)
1319
{
1420
while (!Directory.GetFiles(currentDirectory, "*.sln").Any())

src/FlaUI.WebDriver.UITests/WindowTests.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,14 @@ public void GetWindowRect_Default_IsSupported()
1515
var driverOptions = FlaUIDriverOptions.TestApp();
1616
using var driver = new RemoteWebDriver(WebDriverFixture.WebDriverUrl, driverOptions);
1717

18+
var scaling = TestApplication.GetScaling(driver);
1819
var position = driver.Manage().Window.Position;
1920
var size = driver.Manage().Window.Size;
2021

2122
Assert.That(position.X, Is.GreaterThanOrEqualTo(0));
2223
Assert.That(position.Y, Is.GreaterThanOrEqualTo(0));
23-
Assert.That(size.Width, Is.InRange(629, 630));
24-
Assert.That(size.Height, Is.InRange(515, 516));
24+
Assert.That(size.Width, Is.InRange(629 * scaling, 630 * scaling));
25+
Assert.That(size.Height, Is.InRange(515 * scaling, 516 * scaling));
2526
}
2627

2728
[Test]

src/FlaUI.WebDriver/FlaUI.WebDriver.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
<RuntimeIdentifiers>win-x64</RuntimeIdentifiers>
1010
<PublishSingleFile>true</PublishSingleFile>
1111
<IncludeNativeLibrariesForSelfExtract>true</IncludeNativeLibrariesForSelfExtract>
12+
<ApplicationManifest>app.manifest</ApplicationManifest>
1213
</PropertyGroup>
1314

1415
<ItemGroup>

src/FlaUI.WebDriver/app.manifest

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
2+
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3">
3+
<asmv3:application>
4+
<asmv3:windowsSettings>
5+
<dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true</dpiAware>
6+
<dpiAwareness xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">PerMonitorV2</dpiAwareness>
7+
</asmv3:windowsSettings>
8+
</asmv3:application>
9+
</assembly>

src/TestApplications/WpfApplication/MainWindow.xaml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,9 @@
3232
</MenuItem>
3333
</Menu>
3434
<StatusBar DockPanel.Dock="Bottom">
35-
<StatusBarItem />
35+
<StatusBarItem>
36+
<TextBlock x:Name="DpiScaling"/>
37+
</StatusBarItem>
3638
</StatusBar>
3739
<TabControl>
3840
<TabItem Header="Simple Controls">

src/TestApplications/WpfApplication/MainWindow.xaml.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using System.Windows;
22
using System.Windows.Controls;
3+
using System.Windows.Media;
34

45
namespace WpfApplication
56
{
@@ -27,6 +28,12 @@ private void Selector_OnSelectionChanged(object sender, SelectionChangedEventArg
2728
}
2829
}
2930

31+
protected override void OnRenderSizeChanged(SizeChangedInfo sizeInfo)
32+
{
33+
DpiScaling.Text = VisualTreeHelper.GetDpi(this).DpiScaleX.ToString();
34+
base.OnRenderSizeChanged(sizeInfo);
35+
}
36+
3037
private void OnShowLabel(object sender, RoutedEventArgs e)
3138
{
3239
MenuItem menuitem = sender as MenuItem;
Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
1-
<Project Sdk="Microsoft.NET.Sdk">
1+
<Project Sdk="Microsoft.NET.Sdk">
22

33
<PropertyGroup>
44
<OutputType>WinExe</OutputType>
55
<TargetFramework>net6.0-windows</TargetFramework>
66
<Nullable>disable</Nullable>
77
<ImplicitUsings>enable</ImplicitUsings>
88
<UseWPF>true</UseWPF>
9-
<AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath>
9+
<AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath>
10+
<ApplicationManifest>app.manifest</ApplicationManifest>
1011
</PropertyGroup>
1112

1213
</Project>
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
2+
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3">
3+
<asmv3:application>
4+
<asmv3:windowsSettings>
5+
<dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true</dpiAware>
6+
<dpiAwareness xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">PerMonitorV2</dpiAwareness>
7+
</asmv3:windowsSettings>
8+
</asmv3:application>
9+
</assembly>

0 commit comments

Comments
 (0)