原谅我有一个奇怪的头衔,但是我在正确命名时遇到了很大的问题。
我遇到了LoginPage
类的问题:
public class LoginPage : PageBase
{
private static readonly By IsLoadedLocator = By.Id("logo");
public LoginPage(IWebDriver webDriver) : base(webDriver)
{
if (!IsLoaded()) throw new NoSuchElementException("Login page is not loaded");
}
// (1) This method
public LoginFormComponent GetLoginFormComponent()
{
var component = new LoginFormComponent(this);
return component.IsLoaded() ? component : null;
}
public override By GetIsLoadedLocator()
{
return IsLoadedLocator;
}
}
标有(1)的方法。究竟发生了什么,LoginFormComponent
是一个类。我们根据不同的课程创建方法,这样做的目的是什么?
第二个问题
var loginPage = new LoginPage(driver);
如果loginPage是可变的,我们正在初始化一个对象,但为什么它没有以正常方式完成,如:
LoginPage loginPage = new LoginPage(driver)
答案 0 :(得分:0)
第一个问题:
public LoginFormComponent GetLoginFormComponent()
{
// Create an instance of LoginFormComponent
var component = new LoginFormComponent(this);
// Return component if IsLoaded == true or null if it's false.
return component.IsLoaded() ? component : null;
}
第二个问题:
关键字var
就像一个变量类型的占位符,在编译代码时,编译器将在幕后制作'用适当的数据类型确定和替换var。
var
不要与dynamic
混在一起,因为它们不同。
答案 1 :(得分:0)
回答你的第一个问题:
public LoginFormComponent GetLoginFormComponent()
{
var component = new LoginFormComponent(this);
return component.IsLoaded() ? component : null;
}
GetLoginFormComponent()
是一种返回LoginFormComponent
内容的方法。该方法的第一行是创建LoginFormComponent
的新实例,并传递您当前所在的LoginPage
实例(使用this
)。第二行使用ternary operator ?:
,基本上表示如果第一个表达式为真,则返回?
之后的项,如果表达式为false,则返回:
之后的项。它也可以写成:
if(component.IsLoaded())
{
return component;
}
else
{
return null;
}
至于你的第二个问题,var
只是一种语法糖,可以阻止程序员编写冗余代码。看看声明变量并实例化它的传统方式:
LoginPage loginPage = new LoginPage(driver);
这是多余的权利吗?为什么我们需要两次输入LoginPage
?当您使用var
时,编译器将隐式确定类型(以免您编写冗余代码):
var loginPage = new LoginPage(driver);
请注意,var
与JavaScript var
不同。 var
不是一个松散类型的对象,对程序员来说只是一个简短的手。