如何编写方法实现无错传递By与string参数?解析By参数报错原因
构造函数用(By, string)报错的原因分析
你遇到的问题核心出在基类构造函数匹配和类型兼容性上,另外代码里的重复类定义也会直接触发错误,具体拆解:
主要原因
- 基类
BaseElement没定义接受(By, string)的构造函数:你写的Banner构造函数调用base(locator, name)时,基类只有(string, string)的构造函数,找不到对应重载,直接报错。 By和string类型不兼容:By是Selenium的定位器对象,和字符串完全是两种类型,基类如果没做类型转换处理,没法直接把By当作string传入原构造函数,这会触发类型不匹配错误。- 重复定义
Banner类:代码里写了两个完全一样的internal class Banner : BaseElement,编译器会直接报重复定义的错误,这是基础语法问题。
怎么解决
- 先合并重复的
Banner类,改成带两个构造函数重载的单类:
internal class Banner : BaseElement { public Banner(string locator, string name) : base(locator, name) { } public Banner(By locator, string name) : base(locator.ToString(), name) // 如果基类能直接接受By,就替换成base(locator, name),否则转成字符串 { } }
- 检查
BaseElement类:如果可以修改基类,就给它加一个public BaseElement(By locator, string name)的构造函数重载;如果不能改基类,就把By对象转换成基类需要的字符串格式(比如提取By的定位表达式,不同Selenium版本的API可能有差异,比如用locator.ToString()或者专门的方法获取定位字符串)。
内容的提问来源于stack exchange,提问作者Resonance
相关产品推荐
相关产品推荐

