You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将By类型定位器作为参数传递?编写函数时遇报错

问题分析与解决

你的代码存在两处关键错误,直接导致运行出错:

  1. 函数实现逻辑错误:Set方法里的By.by(cssselectorName)是无效语法,By类根本没有这个方法。而且你已经把By类型的定位器作为参数传入了,不需要再重新构建,直接用参数by即可。
  2. 函数调用方式错误:调用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 09:50:26