Java类级字段的C#等价物
我对C#的认识比对Java的认识要新,我正在尝试将我的一些Java自动化测试转换为C#。Java类级字段的C#等价物,java,c#,selenium,webdriver,Java,C#,Selenium,Webdriver,我对C#的认识比对Java的认识要新,我正在尝试将我的一些Java自动化测试转换为C#。 我的问题是关于以下代码: public class UnitTest1 { [Test] public void loginTest() { //path variable points to the chrome driver exe bin location var path = Path.GetDirectoryName(Assembly.Ge
我的问题是关于以下代码:
public class UnitTest1
{
[Test]
public void loginTest()
{
//path variable points to the chrome driver exe bin location
var path = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
//pass the path to our new driver
var driver = new ChromeDriver(path);
//then pass the driver to our page object + add IWebdriver as a
//param to HomepageClass obj
var homePage = new HomePage(driver);
homePage.goTo();
}
}
这段代码实例化了一个新的chrome驱动程序,并在homepage对象上调用了一个简单的goTo方法。它还将驱动程序传递给主页对象,允许驱动程序以其他方式与页面对象交互
当前编写代码的方式意味着我必须为我计划编写的每个未来测试重新创建局部变量。
以与Java类似的方式,我希望在类级别使用与字段等效的内容,以便在类中的多个测试中重用这些字段。有人能告诉我怎么做吗
到目前为止,我所尝试的:
我尝试在类级别将变量更改为对象,并在设置方法中初始化它们,如下所示:
public class UnitTest1
{
object homePage;
object path;
object driver;
[SetUp]
public void startDriver()
{
//path variable points to the chrome driver bin location
path = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
//pass the path to our new driver
driver = new ChromeDriver(path);
//then pass the driver to our page object + add
//IWebdriver as a param to HomepageClass obj
homePage = new HomePage(driver);
}
[Test]
public void loginTest()
{
homePage.goTo();
}
}
这产生了以下错误,我设法修复了其中一些错误,如下所示:
参数1:无法从“object”转换为“OpenQA.Selenium.Chrome.ChromeOptions”
状态:固定方式:更改:对象路径代码>至色度选项路径代码>
无法将类型“string”隐式转换为“OpenQA.Selenium.Chrome.ChromeOptions”
状态:尚未修复。这是由于修复了第一个错误而生成的
参数1:无法从“object”转换为“OpenQA.Selenium.IWebDriver”
状态:固定方式:更改对象驱动程序代码>到IWebdriver代码>
“object”不包含“goTo”的定义,并且找不到接受“object”类型的第一个参数的扩展方法“goTo”(是否缺少using指令或程序集引用?)
状态:尚未修复
任何建议都值得赞赏请注意,这是未经测试的,并且仅基于您的错误:
返回一个字符串
,而不是对象路径代码>或色度选项路径
应该是字符串路径代码>取而代之
关于你上次引用的错误:
“object”不包含“goTo”的定义,并且找不到接受“object”类型的第一个参数的扩展方法“goTo”(是否缺少using指令或程序集引用?)
这意味着您当前正在尝试使用对象主页上的.goTo
,而对象
-类显然没有任何goTo
方法。
这可以通过更改对象主页来解决
到主页
,或者更改主页.goTo()代码>到((主页)主页).goTo()代码>(我建议第一个)
不确定第一个引用的错误来自何处,因为我在您的startDriver()
方法中没有看到任何ChromeOptions
,但我也会更改对象驱动程序编码>至色度驱动程序代码>
TL;医生:
更改:
object homePage;
object path;
object driver;
致:
注:当您在类级别上使用对象变量而不在代码中使用强制转换时,Java中也会出现类似的错误。请注意,这是未测试的,并且仅基于您的错误:
返回一个字符串
,而不是对象路径代码>或色度选项路径
应该是字符串路径代码>取而代之
关于你上次引用的错误:
“object”不包含“goTo”的定义,并且找不到接受“object”类型的第一个参数的扩展方法“goTo”(是否缺少using指令或程序集引用?)
这意味着您当前正在尝试使用对象主页上的.goTo
,而对象
-类显然没有任何goTo
方法。
这可以通过更改对象主页来解决
到主页
,或者更改主页.goTo()代码>到((主页)主页).goTo()代码>(我建议第一个)
不确定第一个引用的错误来自何处,因为我在您的startDriver()
方法中没有看到任何ChromeOptions
,但我也会更改对象驱动程序编码>至色度驱动程序代码>
TL;医生:
更改:
object homePage;
object path;
object driver;
致:
PS:当您在类级别上使用对象变量而不在代码中使用强制转换时,Java中也会出现类似的错误。您收到的第一个错误:
参数1:无法从“object”转换为“OpenQA.Selenium.Chrome.ChromeOptions”
不是告诉您将path变量的类型更改为ChromeOptions
,而是告诉您ChromeDriver
构造函数采用ChromeOptions
类型,而不是通用的对象
对于这一点,文档是不错的,并且在处理不熟悉的类型时,应该始终首先查看文档()
根据ChromeOptions
的文档,您可以通过执行以下操作指定Chrome二进制文件的路径:
ChromeOptions options = new ChromeOptions()
options.setBinary(new File(path));
如果您想这样做,您可以将options变量移动到类级别并初始化一次
扩展Kevin的答案-除非绝对必要,否则通常最好不要简单地将某个对象声明为对象,因为如果不先将其强制转换,您将无法对对象调用任何特定于类型的方法
参数1:无法从“object”转换为“OpenQA.Selenium.Chrome.ChromeOptions”
不是告诉您将path变量的类型更改为ChromeOptions
,而是告诉您ChromeDriver
构造函数采用ChromeOptions
类型,而不是通用的对象
对于这一点,文档是不错的