页面对象模型中的登录问题

时间:2018-05-14 12:51:11

标签: selenium nunit

我有一个用例,表示以下步骤 我试图在Nunit中使用POM实现它。

  1. 打开登录表单
  2. 使用Excel将数据输入用户名和密码字段。

    3A。 如果凭据正确

    a)将测试用例记录为

    b)点击注销链接

  3. 4.关闭剩余的浏览器窗口

    3b。如果凭据不正确

    a)将测试用例记录为失败

    b)清除用户名和密码文本框

    c)无需关闭浏览器窗口。

    现在问题已经在Main Class的[Setup]中实例化了驱动程序。 如果登录成功,我们如何再次实例化浏览器窗口。

    我正在添加以下代码

    Login Object Class
    using NUnit.Framework;
    using OpenQA.Selenium;
    using OpenQA.Selenium.Chrome;
    using OpenQA.Selenium.Support.UI;
    using SeleniumExtras.PageObjects;
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace PracticePrograms.PageObjectsWithPageFactory
    {
    public class VSSLoginObjects
    {
        [FindsBy(How = How.Id, Using = "userNameOldLook")]
        public IWebElement Userid { get; set; }
    
        [FindsBy(How = How.XPath, Using = "//input[@type='password']")]
        public IWebElement Password { get; set; }
    
        [FindsBy(How = How.XPath, Using = "//a[contains(text(),'login')]")]
        public IWebElement Btn_Login { get; set; }
    
        [FindsBy(How = How.XPath, Using = "//li[contains(text(),'Login failed')]")]
        public IWebElement Lbl_Login_Failed { get; set; }
    
        [FindsBy(How = How.XPath, Using = "//a[contains(text(),'Logoff')]")]
        public IWebElement lnk_logoff;
    
    
        public VSSLoginObjects()
        {
            PageFactory.InitElements(DriverInstance.driver, this);
        }
    
        public void Login_QAPortal()
        {
            Userid.SendKeys("v0c1344");
            Wait.UntilElementDisplayed(DriverInstance.driver, Password);
            Password.SendKeys("welcome5");
            Btn_Login.Click();
            //return new QAPortal_LandingPage_Objects();
    
        }
        public void Test_Login_QA_Portal()
        {
            String Excel = @"C:\\Selenium Files\\TestData.xlsx";
            int length = ExcelClassTemp.GetRowCount(Excel, 3);
            for (int i = 2; i <= length; i++)
            {
    
                String data = ExcelClassTemp.ReadExcel(Excel, 3, i, 1);
                String upper_data = data.ToUpper();
                Userid.SendKeys(upper_data);
                Password.SendKeys("Welcome567");
                Btn_Login.Click();
    
                if (DriverInstance.driver.PageSource.Contains("Trucks Portal"))
                {
                    Console.WriteLine("User Credentials" + upper_data + "Passed");
                    lnk_logoff.Click();
                    DriverInstance.driver.Close();
    
                }
                else
                {
                    Console.WriteLine("User Credentials" + upper_data + "Failed");
                    Userid.Clear();
                    Password.Clear();
                }
    
    
    
            }
    
        }
       }
       }
    

    添加主类

    Main Class
    using System;
    using System.Linq;
    using Microsoft.VisualStudio.TestTools.UnitTesting;
    using NUnit.Framework;
    using OpenQA.Selenium.Chrome;
    
     namespace PracticePrograms.PageObjectsWithPageFactory
     {
    public class Tests
    {
        [SetUp]
        public void setup()
        {
            DriverInstance.driver = new ChromeDriver();
            DriverInstance.driver.Navigate().GoToUrl("Go to Url");
            DriverInstance.driver.Manage().Window.Maximize();
    
    
        }
    
    
    
        [Test]
        public void Perform_VSS_Login()
        {
            VSSLoginObjects login = new VSSLoginObjects();
            login.Test_Login_QA_Portal();
    
        }
    
    
    
        }
    
    }
    

1 个答案:

答案 0 :(得分:0)

进行一些更改:

引用DriverInstance.driver将此声明为全局。

当您在Test方法中创建VSSLoginObjects的对象时,如:

VSSLoginObjects login = new VSSLoginObjects();  

DriverInstance.driver中传递new VSSLoginObjects()的引用;

类似于:VSSLoginObjects(reference of driver object)

说明:当您创建任何类的对象并传递引用时,将调用参数化 构造函数

我相信这个构造函数会被调用:

 public VSSLoginObjects()
    {
        PageFactory.InitElements(DriverInstance.driver, this);
    }