与C#相比,我是C#的新手,并且正在尝试将我的某些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方法。还将驱动程序传递给主页对象,允许驱动程序以其他方式与页面对象进行交互。
当前编写代码的方式意味着我将不得不为计划编写的每个将来的Test重新创建局部变量。 以与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:无法从“对象”转换为“ OpenQA.Selenium.Chrome.ChromeOptions”
状态:通过以下方式解决:将object path;
更改为ChromeOptions path;
无法将类型'string'隐式转换为'OpenQA.Selenium.Chrome.ChromeOptions'
状态:尚未修复。这是由于修复了第一个错误而产生的
参数1:无法从“对象”转换为“ OpenQA.Selenium.IWebDriver”
状态:通过以下方式解决:将object driver;
更改为IWebdriver driver;
'object'不包含'goTo'的定义,也找不到找到接受'object'类型的第一个参数的扩展方法'goTo'(您是否缺少using指令或程序集引用?)
状态:尚未修复
任何建议表示赞赏
答案 0 :(得分:2)
请注意,这未经测试,仅基于您的错误:
您的Path.GetDirectoryName(...)
返回一个string
,因此应该代替object path;
而不是ChromeOptions path;
或string path;
。
关于您最后引用的错误:
'object'不包含'goTo'的定义,也找不到找到接受'object'类型的第一个参数的扩展方法'goTo'(您是否缺少using指令或程序集引用?)
这意味着您当前正在尝试在.goTo
上使用object homePage
,而object
类显然没有任何goTo
方法。
可以通过将object homePage;
更改为HomePage homePage
或将homePage.goTo();
更改为((HomePage)homePage).goTo();
(我建议第一个)来解决此问题。
由于在您的ChromeOptions
方法中看不到任何startDriver()
,所以不确定第一个引用的错误来自何处,但是我也会将object driver;
更改为{{1} }。
TL; DR:
更改:
ChromeDriver driver;
收件人:
object homePage;
object path;
object driver;
PS:如果在类级别具有HomePage homePage;
string path;
ChromeDriver driver;
变量而不在代码中不使用强制转换,则Java中也会发生类似的错误。
答案 1 :(得分:2)
您收到的第一个错误:
参数1:无法从“对象”转换为“ 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));
您始终可以将options变量移至类级别,并在需要时初始化一次。
要扩展凯文的答案-除非绝对有必要,否则通常最好不要简单地将某事物声明为对象,因为您将无法在不先转换的情况下在object
上调用任何特定于类型的方法