In Selenium with C#, a page object is a class that gives tests a clear interface to a web page or reusable page region. Keep locators and page-specific browser operations inside that class; keep assertions about application behavior in the test. This separation reduces duplicated UI knowledge and helps localize changes when the interface changes, without eliminating test maintenance.
What the Page Object Model does
A page object is an object-oriented interface to a page or application component. It centralizes knowledge of the page’s HTML and locators, along with operations a test can perform there. Tests call methods that describe intent—such as entering credentials—rather than repeating selectors and low-level browser interactions.
Selenium’s official Page Object Models guidance illustrates the pattern in Java. The design principles apply to C#, but Java examples are not C# implementations; use the Selenium Page Object Models documentation for the general guidance and the Selenium .NET API docs for exact C# APIs.
What belongs in a page object
- Locators and knowledge of the page’s structure.
- Operations the page offers, expressed in intention-revealing methods.
- Information a test needs to inspect, exposed through a useful property or method.
- Navigation behavior that can return an object representing the destination page.
What generally stays in the test
Assertions about expected application behavior belong in the test. Selenium’s guidance states, “Page objects themselves should never make verifications or assertions.” A narrow exception is checking that the expected page loaded when constructing its page object. That is a page-identity or readiness check, not an assertion that the business outcome was correct.
Free tools Windows power users keep installed
One-click scans. No signup required.
#1 Best Overall
- Read Before You Buy — No Video Output: These adapters support charging and USB 2.0 data transfer, but cannot transmit video signals. Except for standard USB webcams (which use USB data only), they are not compatible with HDMI/DisplayPort cables, video-capable USB-C hubs, or docking stations with video output.
- Convert USB-A Ports to USB-C: Designed to connect USB-C earphones, cables, flash drives, card readers, and other USB-C accessories to standard USB-A ports. Plug-and-play with no drivers or software required.
- Aluminum Alloy Housing: Built with a sturdy aluminum alloy shell that aids in heat dissipation and protects against daily wear and scratches. Designed to maintain a stable and secure connection.
- Compact & Travel-Friendly: The ultra-compact design allows the adapter to stay plugged into your device without blocking adjacent ports or adding bulk, reducing wear and tear on your original USB ports.
- 12-Month Warranty: Backed by a 12-month manufacturer warranty for peace of mind. Designed to meet strict quality control standards for reliable everyday performance.
Set up Selenium for C#
Selenium’s current getting-started guide lists .NET SDK 8.0 or later for its .NET test-suite path, which uses dotnet restore and dotnet test. It separately lists .NET 10 or later for running the standalone file-based HelloSelenium.cs script. These are different workflows; the standalone requirement does not mean every Selenium C# project needs .NET 10. Check the Selenium first-script guide before setup because SDK guidance can change.
The Selenium documentation names Rider and Visual Studio Code as IDE options, not requirements. Selenium’s .NET API documentation exposes the Selenium.WebDriver and Selenium.Support modules. Consult its current .NET API docs when you need exact signatures.
Build a simple LoginPage
The following is an illustrative C# pattern, not code copied from Selenium’s Java example. It assumes a test project with Selenium WebDriver available, a configured browser driver, and a login page whose controls match the sample selectors. Replace the URL and selectors with those for your application.
Rank #2
- 5-in-1 USB-C Hub: Experience comprehensive connectivity featuring a Power Delivery input, two USB-A 2.0 ports, a USB-A 3.0 port, and an HDMI port. (Note: The USB-C power delivery input port is only for connecting an external wall charger to power your laptop and cannot power peripheral devices.)
- 90W Pass-Through Charging: Achieve optimal charging with 90W pass-through power to your laptop, supported by a total input of 100W, with the hub reserving 10W for operational efficiency. (Note: Wall charger not included.)
- Quick Data Transfers: Accelerate your productivity with rapid data transfers using a high-speed 5Gbps USB 3.0 port and two 480Mbps USB 2.0 ports.
- 4K HDMI Display: Enhance your visual experience with a hub capable of delivering 4K resolution at 30Hz in both mirror and extend modes. Please note that this hub is compatible with MacBook (macOS 12 and newer), Windows 10 and 11, ChromeOS, and laptops equipped with DP Alt Mode and Power Delivery. Note: This device is not compatible with Linux.
- What You Get: Anker USB-C Hub (5-in-1, 4K HDMI), welcome guide, 18-month warranty, and our friendly customer service.
Page objects
Keep locators private and expose operations in terms of what the page does. This example returns a HomePage after submitting credentials; the destination object’s construction check confirms the expected page has loaded.
Quick wins for a faster PC:
Scan for outdated or missing drivers - takes under a minuteDriver Scan →Clear out junk files and repair common Windows errorsFree Scan →using OpenQA.Selenium;
using OpenQA.Selenium.Support.UI;
public sealed class LoginPage
{
private readonly IWebDriver _driver;
private readonly By _username = By.Id("username");
private readonly By _password = By.Id("password");
private readonly By _submit = By.CssSelector("button[type='submit']");
public LoginPage(IWebDriver driver)
{
_driver = driver;
if (!driver.Url.Contains("/login", StringComparison.OrdinalIgnoreCase))
{
throw new InvalidOperationException("Expected the login page.");
}
}
public HomePage LoginAs(string username, string password)
{
_driver.FindElement(_username).SendKeys(username);
_driver.FindElement(_password).SendKeys(password);
_driver.FindElement(_submit).Click();
return new HomePage(_driver);
}
}
public sealed class HomePage
{
private readonly IWebDriver _driver;
private readonly By _heading = By.CssSelector("h1");
public HomePage(IWebDriver driver)
{
_driver = driver;
}
public string Heading => _driver.FindElement(_heading).Text;
}
LoginAs, HomePage, and the selectors are application-design examples, not Selenium-defined APIs. The sample’s URL check is deliberately simple; for a real application, validate a stable page identity appropriate to its routes and redirects.
Keep the test responsible for the outcome
Create the driver in test setup, pass it into the page object, and make the expected result explicit in the test. The exact test framework and driver lifecycle depend on your project.
Rank #3
- Sleek 7-in-1 USB-C Hub: Features an HDMI port, two USB-A 3.0 ports, and a USB-C data port, each providing 5Gbps transfer speeds. It also includes a USB-C PD input port for charging up to 100W and dual SD and TF card slots, all in a compact design.
- Flawless 4K@60Hz Video with HDMI: Delivers exceptional clarity and smoothness with its 4K@60Hz HDMI port, making it ideal for high-definition presentations and entertainment. (Note: Only the HDMI port supports video projection; the USB-C port is for data transfer only.)
- Double Up on Efficiency: The two USB-A 3.0 ports and a USB-C port support a fast 5Gbps data rate, significantly boosting your transfer speeds and improving productivity.
- Fast and Reliable 85W Charging: Offers high-capacity, speedy charging for laptops up to 85W, so you spend less time tethered to an outlet and more time being productive.
- What You Get: Anker USB-C Hub (7-in-1), welcome guide, 18-month warranty, and our friendly customer service.
// Illustrative test body; create and dispose driver using your test framework's setup.
driver.Navigate().GoToUrl("https://example.test/login");
var login = new LoginPage(driver);
var home = login.LoginAs("alex", "correct-password");
Assert.AreEqual("Welcome, Alex", home.Heading);
The assertion is visible beside the scenario that requires it. If the application changes its heading or its success behavior, the test states clearly what needs reconsideration.
Model expected login failure
A failed login is a separate outcome, so give it a clear operation or result rather than embedding an assertion inside LoginPage. For example, an operation could submit credentials and return a result object exposing the displayed error text; the test then asserts that text. This keeps the page’s interaction model reusable while leaving the expected error message as a test expectation.
Recommended Free Tools
Represent repeated regions as components
A page object does not have to represent an entire page. If the same navigation bar, account menu, or other region appears on multiple pages, model it as a component object and compose it into the page objects that contain it. That makes reuse explicit without creating a sprawling base class.
Rank #4
- Dual Converters, Infinite Potential:Includes 2× USB C male to USB A female adapters and 2× USB A male to USB C female adapters. Perfect for a wide range of uses—tablets with Bluetooth keyboards, expand USB ports on macbook, and more. Two different converters for all your daily needs
- Next-Level 10Gbps & 3A Charging: No more slow 480Mbps, this usb to usb c adapter has a transfer speed of up to 10Gbps, allowing you to do more transferring in less time. This usb adapter fits both USB A and USB C charger, supporting up to 3A fast charging
- Upgraded Exquisite Craftsmanship: With an aluminum alloy housing and metal connector, the usbc to usb adapter is extremely durable and sturdy. Rigorously tested to withstand more than 10,000 times of plugging and unplugging, ensuring long-lasting performance
- Broad Compatible: The usb c to usb adapter widely supports all USB C/ USB A devices like laptops, tablets, cellphones, car chargers, and phone chargers. Such as compatible with MacBook Pro/Air 2023/2022, Thunderbolt 4/3 Devices,Apple MagSafe Watch 9/8/7/SE/Ultra, iPad Pro 2022/2021, Samsung Galaxy S23/S20/S10, and iPhone 17/16/15 Pro. Plug and play
- Please Note: To reach 10Gbps speed, keep the cable under 3.3 ft. For USB A Male to USB C adapters, try flipping the USB C connector. USB C Male to USB A adapters support bidirectional 10Gbps transfer within 3.3 ft
For example, a NavigationBar component could own its menu locators and provide methods such as OpenAccountMenu. A page that contains it can expose the component as a property. Keep the component’s public methods focused on the services that region offers; Selenium describes public page or component methods as representing those services.
Design choices that keep POM useful
| Choice | What it changes | Useful when |
|---|---|---|
| Locators repeated in test code | Each test carries some knowledge of the page HTML, so a selector change can touch multiple tests. | Only for very small throwaway checks; it becomes costly as scenarios repeat. |
| Page object per page | Page structure and operations are centralized, and tests read in terms of page actions. | Most pages with distinct behaviors and stable responsibilities. |
| Composed component objects | Repeated regions have their own locators and operations, reused across pages. | Shared navigation, headers, or other meaningful repeated sections. |
Avoid both extremes: duplicating selectors throughout tests and hiding all behavior in a giant base class. Selenium advises that page objects should seldom expose the underlying driver. Prefer methods that express page services over a general-purpose wrapper around every WebDriver command.
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Run and maintain the test suite
- Choose the Selenium .NET test-suite setup in the official getting-started guide and meet its .NET SDK 8.0-or-later prerequisite.
- Restore the example project’s dependencies with
dotnet restore. - Run the tests with
dotnet test. - When a UI change breaks tests, update the affected page or component object’s locator or operation, then review the test expectation if the application behavior also changed.
The separate standalone HelloSelenium.cs route has the .NET 10-or-later requirement described above; do not substitute it for the test-suite path unless that is the workflow you intend to use.
The Tool Desk
Outbyte Driver Updater FREEFix the driver behind crashes, sound loss and screen glitchesFind Drivers →Outbyte PC Repair FREERepair Windows errors before they cause bigger problemsFix Now →Best Value
- 5-in-1 Connectivity: Equipped with a 4K HDMI port, a 5 Gbps USB-C data port, two 5 Gbps USB-A ports, and a USB C 100W PD-IN port. Note: The USB C 100W PD-IN port supports only charging and does not support data transfer devices such as headphones or speakers.
- Powerful Pass-Through Charging: Supports up to 85W pass-through charging so you can power up your laptop while you use the hub. Note: Pass-through charging requires a charger (not included). Note: To achieve full power for iPad, we recommend using a 45W wall charger.
- Transfer Files in Seconds: Move files to and from your laptop at speeds of up to 5 Gbps via the USB-C and USB-A data ports. Note: The USB C 5Gbps Data port does not support video output.
- HD Display: Connect to the HDMI port to stream or mirror content to an external monitor in resolutions of up to 4K@30Hz. Note: The USB-C ports do not support video output.
- What You Get: Anker 332 USB-C Hub (5-in-1), welcome guide, our worry-free 18-month warranty, and friendly customer service.
Troubleshoot common POM problems
- Element not found: First verify that the locator matches the current page markup and that navigation has completed. Keep the locator in the page or component object so the correction is centralized.
- Click or lookup happens too early: A page may not be ready immediately after navigation or submission. Add a wait for a meaningful page condition, using Selenium’s current .NET API signatures rather than importing Java syntax verbatim.
- Page-object constructor fails after redirect: The application may redirect to a different route than the simple sample expects. Adjust the page-identity check to match the intended destination, or construct the destination object only after the flow has reached it.
- Tests become hard to understand: If a page object contains scenario-specific assertions or returns low-level driver details, move expectations back into tests and make the public page methods describe user-relevant operations.
- Repeated page changes require edits everywhere: Move duplicated selectors or repeated-region behavior into a page object or composed component. POM localizes maintenance; it cannot prevent updates when the application or its expected behavior changes.
Or skip the browser setup
For capturing a website screenshot as part of a workflow, ScreenshotNeo offers a single request. It is a screenshot API and MCP server for developers, not a replacement for Selenium test automation or page-object design. Its request can return PNG, JPEG, WebP, or PDF; the API details are in the ScreenshotNeo documentation.
curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://example.com -o shot.webp
ScreenshotNeo accepts cookie or consent banners as a visitor and removes more than 60 known consent platforms, newsletter popups, and chat widgets before the capture; each step can be turned off. Bot checks or CAPTCHAs, blank pages, timeouts, failed loads, and cache hits cost nothing, and response headers report the page verdict and whether the request was billed. Its MCP server includes take_screenshot, get_page_info, and capture_pdf for AI agents and MCP clients. The free plan includes 1,000 screenshots a month with no card; paid plans start at $5 for 3,000. Sign up for ScreenshotNeo’s free plan.
Frequently Asked Questions
Does Selenium’s official Page Object Model example use C#?
No. The cited Page Object Models page demonstrates the principles in Java; its example should not be treated as C# syntax.
Do page objects need to expose IWebDriver?
Usually not. Keep the driver as an implementation detail and expose operations or information that represent the page or component.
What’s actually slowing this PC down?
Pick the symptom - the matching free tool is one click away.
Quick Recap
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.

