0

我是 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 指令或程序集引用?)

状态:尚未修复

任何建议表示赞赏

4

2 回答 2

2

您收到的第一个错误:

参数 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不先强制转换的情况下调用任何特定于类型的方法

于 2018-08-23T15:48:22.147 回答
2

请注意,这是未经测试的,仅基于您的错误:

Path.GetDirectoryName(...)返回 a string, 所以而不是object path;orChromeOptions path;它应该是string path;

至于您最后引用的错误:

“object”不包含“goTo”的定义,并且找不到接受“object”类型的第一个参数的扩展方法“goTo”(您是否缺少 using 指令或程序集引用?)

这意味着您当前正在尝试使用.goToon object homePage,而object-class 显然没有任何goTo方法。
这可以通过更改object homePage;HomePage homePage或更改homePage.goTo();((HomePage)homePage).goTo();(我建议第一个)来解决。

不确定第一个引用的错误来自哪里,因为我ChromeOptions在您的startDriver()方法中看不到任何错误,但我也会更改object driver;ChromeDriver driver;.


TL;博士:

改变:

object homePage;
object path;
object driver;

至:

HomePage homePage;
string path;
ChromeDriver driver;

ObjectPS:当你在类级别有变量而不在代码中使用强制转换时,Java 中也会发生类似的错误。

于 2018-08-23T15:33:26.920 回答