如何用C#在Visual Studio中自动控制网页文本框传值、操作登录按钮
问题修复方案
现有代码核心错误点
- 混淆了浏览器启动方式:通过
Process.Start打开的Edge和实例化的EdgeDriver属于完全独立的进程,EdgeDriver无法控制前者打开的页面,所有操作都应该通过EdgeDriver自带的页面加载方法实现 - 驱动未加载目标页面:实例化
EdgeDriver后没有调用页面跳转方法,驱动默认打开空白页,必然找不到目标元素 - 元素定位规则错误:使用
By.Name选择器时传入的是元素的class属性值,Name选择器仅能匹配元素的name属性,定位逻辑完全不匹配 - 缺少页面加载等待逻辑:未等待页面元素渲染完成就发起查找请求,大概率会返回元素不存在的异常
- JavaScript方法拼写错误:DOM方法应为
getElementsByClassName而非getElementsByClass,且该方法返回元素集合,需要指定下标才能获取单个元素
可正常运行的修正代码
using System; using OpenQA.Selenium; using OpenQA.Selenium.Edge; using OpenQA.Selenium.Support.UI; using SeleniumExtras.WaitHelpers; namespace HtmlAgilityPackTest { class Program { static void Main(string[] args) { // 初始化Edge驱动 IWebDriver driver = new EdgeDriver(); // 最大化窗口避免元素被遮挡 driver.Manage().Window.Maximize(); // 加载目标页面 driver.Navigate().GoToUrl("https://developer.servicenow.com"); // 初始化显式等待,最长等待10秒 WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10)); try { // 定位用户名输入框,此处使用Class选择器匹配类名 IWebElement usernameInput = wait.Until(ExpectedConditions.ElementIsVisible(By.ClassName("username-box"))); // 传入账号 usernameInput.SendKeys("xyz@gmail.com"); // 定位登录按钮 IWebElement signInBtn = wait.Until(ExpectedConditions.ElementToBeClickable(By.XPath("//*[contains(text(),'Sign In')]"))); // 点击登录按钮 signInBtn.Click(); } catch (Exception ex) { Console.WriteLine($"操作失败:{ex.Message}"); } finally { // 操作完成后按需保留或关闭驱动 // driver.Quit(); } } } }
前置依赖说明
- 需在NuGet包管理器中安装三个包:
Selenium.WebDriver、Selenium.WebDriver.MSEdgeDriver、Selenium.Support - 确保安装的
MSEdgeDriver版本和本地Edge浏览器版本完全一致,否则会出现驱动启动失败的问题
内容的提问来源于stack exchange,提问作者jessy mary
相关产品推荐
相关产品推荐

