如何将By类型定位器作为参数传递?编写函数时遇报错
问题分析与解决
你的代码存在两处关键错误,直接导致运行出错:
- 函数实现逻辑错误:
Set方法里的By.by(cssselectorName)是无效语法,By类根本没有这个方法。而且你已经把By类型的定位器作为参数传入了,不需要再重新构建,直接用参数by即可。 - 函数调用方式错误:调用
f.Set(By.ClassName,"email_create")时,By.ClassName是一个静态方法,不是By类型的实例,必须执行这个方法并传入参数,才能得到合法的定位器实例。
修正后的代码
方案一:直接传入By实例(更简洁)
修正Set方法
public void Set(By by) { driver.FindElement(by).SendKeys("Hello"); }
修正调用代码
public void TestMethod1() { IWebDriver driver = new EdgeDriver(); driver.Manage().Window.Maximize(); Functions f = new Functions(driver); f.OpenBrowser(); // 直接传入构建好的By定位器实例 f.Set(By.ClassName("email_create")); }
方案二:传入定位方法和对应值(适配你原本的调用思路)
修正Set方法
// 传入By的静态定位方法(比如By.ClassName、By.CssSelector)和对应的值 public void Set(Func<string, By> byMethod, string selectorValue) { driver.FindElement(byMethod(selectorValue)).SendKeys("Hello"); }
修正调用代码
public void TestMethod1() { IWebDriver driver = new EdgeDriver(); driver.Manage().Window.Maximize(); Functions f = new Functions(driver); f.OpenBrowser(); // 传入静态方法和参数,内部自动构建定位器 f.Set(By.ClassName, "email_create"); }
错误原因说明
By类的定位逻辑是:通过静态方法(如By.ClassName()、By.CssSelector())传入定位字符串,返回一个By类型的定位器实例,供FindElement方法使用。- 你原代码里既没有正确使用传入的
By参数,又调用了不存在的By.by()方法,同时调用时没有生成合法的By实例,这些都是导致错误的核心原因。
内容的提问来源于stack exchange,提问作者Ron
相关产品推荐
相关产品推荐

