通过调用public方法将IApp app变量传递给私有方法

时间:2017-01-16 23:00:46

标签: c# xamarin.uitest

鉴于以下代码位于名为Tests.cs的文件中:

public class Tests
{
    IApp app;
    Platform platform;

    public Tests(Platform platform)
    {
        this.platform = platform;
    }

    [SetUp]
    public void BeforeEachTest()
    {
        app = AppInitializer.StartApp(platform);
    }

    [Test]
    public void AttemptInvalidLogin()
    {
        LandingPage landingPageObjects = new LandingPage();
        landingPageObjects.Login(app, "test123", "test123");
    }
}

以下代码位于名为LandingPage.cs的文件中:

public class LandingPage
{
    public void Login(IApp app, String Email, String Password)
    {
        LandingPageDisplayed(app);
        EnterEmailAddress(app, Email);
        EnterPassword(app, Password);
    }

    private void LandingPageDisplayed(IApp app)
    {
        app.WaitForElement(c => c.Marked("txtLogin").Text("Login"));
    }

    private void EnterEmailAddress(IApp app, String emailAddress)
    {
        app.EnterText(c => c.Marked("editvalidid"), emailAddress);
    }

    private void EnterPassword(IApp app, String password)
    {
        app.EnterText(c => c.Marked("editvalidpassword"), password);
    }

    private void TapLoginButton(IApp app)
    {
        app.Tap(c => c.Marked("btnlogin"));
    }
}

我想学习一种更有效的方法来传递变量" app"到LandingPage.cs中的私有方法。我尝试在LandingPage类中设置IApp应用程序,但是当我的代码在Xamarin.UITests中执行时,app将作为未定义返回,并且不会输入数据。我也尝试将Tests类中的IApp app设置为public,但这也不起作用。

所需的代码看起来与此类似:

public class LandingPage
{
    IApp app = Tests.app;
    public void Login(String Email, String Password)
    {
        LandingPageDisplayed();
        EnterEmailAddress(Email);
        EnterPassword(Password);
    }

    private void LandingPageDisplayed()
    {
        app.WaitForElement(c => c.Marked("txtLogin").Text("Login"));
    }

    private void EnterEmailAddress(String emailAddress)
    {
        app.EnterText(c => c.Marked("editvalidid"), emailAddress);
    }

    private void EnterPassword(String password)
    {
        app.EnterText(c => c.Marked("editvalidpassword"), password);
    }

    private void TapLoginButton()
    {
        app.Tap(c => c.Marked("btnlogin"));
    }
}

1 个答案:

答案 0 :(得分:2)

您需要在构造函数中注入应用程序

IApp _app;
public LandingPage(IApp app) 
{
   _app = app;
}

然后方法..

private void LandingPageDisplayed()
{
   _app.WaitForElement(c => c.Marked("txtLogin").Text("Login"));
}

然后在你的测试中

var  landingpage = new LandingPage(app);

此外,如果您的测试类确实是LandingPageTests,那么您可能需要

public class LandingPageTests
{
    IApp app;
    Platform platform;
    LandingPage _landingPage;

    public Tests(Platform platform)
    {
        this.platform = platform;
    }

    [SetUp]
    public void BeforeEachTest()
    {
        app = AppInitializer.StartApp(platform);
        _landingPage = new LandingPage(app);
    }

    [Test]
    public void AttemptInvalidLogin()
    {
        _landingPage.Login(app, "test123", "test123");
    }
}