java - Java 类级别字段的 C# 等效项
问题描述
我是 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.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 驱动程序并在主页对象上调用一个简单的 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'
状态:固定者:更改:object path;
到ChromeOptions path;
无法将类型“字符串”隐式转换为“OpenQA.Selenium.Chrome.ChromeOptions”
状态:尚未修复。这是由于修复第一个错误而生成的
参数 1:无法从 'object' 转换为 'OpenQA.Selenium.IWebDriver'
状态:固定者:更改object driver;
为IWebdriver driver;
“object”不包含“goTo”的定义,并且找不到接受“object”类型的第一个参数的扩展方法“goTo”(您是否缺少 using 指令或程序集引用?)
状态:尚未修复
任何建议表示赞赏
解决方案
您收到的第一个错误:
参数 1:无法从 'object' 转换为 'OpenQA.Selenium.Chrome.ChromeOptions'
并没有告诉您将路径变量的类型更改为ChromeOptions
,而是告诉您ChromeDriver
构造函数采用类型ChromeOptions
而不是泛型object
。
文档对此很合适,并且应该始终是您在使用不熟悉的类型时首先看到的地方(https://seleniumhq.github.io/selenium/docs/api/java/org/openqa/selenium/chrome/ChromeDriver.html )
根据 的文档ChromeOptions
,您可以通过执行以下操作指定 Chrome 二进制文件的路径:
ChromeOptions options = new ChromeOptions()
options.setBinary(new File(path));
如果您想要这样做,您始终可以将选项变量移动到类级别并初始化一次。
为了扩展凯文的答案-除非绝对必要,否则通常最好不要简单地将某些东西声明为对象,因为您将无法在object
不先强制转换的情况下调用任何特定于类型的方法
推荐阅读
- python - 导入 Matplotlib 的问题
- python - 有没有办法使用 f-string 从浮点数中去除小数位前的数字?
- amazon-web-services - 在 AWS 中将 CSV 转换为 XLSX
- serverless-framework - 如何在本地运行在同一自定义域上配置的多个微服务?
- excel - VBA-比较两列并根据值在上方或下方插入新行
- c++ - 在 c++ 中覆盖 std::exception 中的 what 函数
- android - 添加对 Xamarin Forms Shell 始终可见的通用元素
- r - 如何在 R 中只创建时间
- pandas - 尝试在 streamlit 应用程序中使用 st.multiselect() 没有得到想要的结果
- javascript - 单击按钮时使功能停止工作(javascrpt)