我有一个用例,表示以下步骤 我试图在Nunit中使用POM实现它。
使用Excel将数据输入用户名和密码字段。
3A。 如果凭据正确
a)将测试用例记录为
b)点击注销链接
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();
}
}
}
答案 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);
}