我打破了对此的测试,以便我有Login,ResetPassword,ForgotPassword等区域的功能文件。让我们说我有下面的例子。我有一个自动化步骤,在CreateAccount.feature中创建一个全新的用户。该步骤在该功能/步骤类中多次使用而没有问题。但现在我希望用户更改密码,以便我创建一个新的功能文件MyAccount.feature。当我复制给定声明时,会立即找到它。然后我添加代码以单击重置密码并继续执行其余步骤。
当我运行ResetPassword测试时,自动化会创建新用户,但是当它进入第2步时,"当我单击重置密码"它失败了,因为它无法找到元素。由于绑定是全局的,这让我很奇怪。所以我所做的就是采取步骤"鉴于我创建了我的帐户"并重命名它并添加到其他功能文件/步骤类并再次运行它。它工作正常。
我不确定为什么我不能在步骤之间分享。有什么想法吗?
一些更新显示更多代码...
CreateAccount.feature
scenario: Feature Create Account
Given I have created my account
-----------
CreateAccountsteps.cs
namespace Project
{
[Binding]
public class CreateAccount: BaseTestObject
{
[Given]
public void Given_I_have_created_my_account()
{
ConfigProperties.Environment = "Test";
TestDriver.goToUrl(ConfigProperties.StartUrl);
TestDriver.goToUrl(ConfigProperties.StartUrl + "Create/Account");
[followed by input for creating a user acct]
-------------------------------------------------
MyAccount.feature
scenario: Feature Change Password
Given I have created my account
When I Click Reset Password
...........
MyAccountSteps.cs
namespace Project
{
[Binding]
public class MyAccountSteps: BaseTestObject
{
[When]
public void When_I_click_Reset_Password()
{
On.MyHeaderPage.BtnResetPassword.Click();
}
[followed by rest of steps to change password]
BaseTestObject.cs
namespace Project
{
public class BaseTestObject
{
private IWebDriver seleniumDriver;
private IDriver testDriver;
[TestInitialize]
public virtual void Setup()
{
TestDriver.goToUrl(ConfigProperties.StartUrl);
}
[AfterScenario]
public void CleanUp()
{
if (seleniumDriver != null)
{
SeleniumDriver.Dispose();
seleniumDriver = null;
}
}
public IWebDriver SeleniumDriver
{
get
{
if (seleniumDriver == null)
{
seleniumDriver = GetDriver();
}
return seleniumDriver;
}
}
public IDriver TestDriver
{
get
{
if (testDriver == null)
{
testDriver = new UiDriver(SeleniumDriver);
}
return testDriver;
}
}
public CurrentPageObjectScope On
{
get
{
return new CurrentPageObjectScope(TestDriver);
}
}
public static String GetTimestamp()
{
return DateTime.Now.ToString("yyyyMMddhhmmssfff");
}
public static String GetTimestamp2()
{
return DateTime.Now.ToString("M/d/yyyy");
}
private IWebDriver GetDriver()
{
switch (ConfigProperties.Browser.ToLower())
{
case "firefox":
return new FirefoxDriver();
case "chrome":
ChromeOptions options = new ChromeOptions();
ChromeDriverService service = ChromeDriverService.CreateDefaultService(@"../Chrome/");
service.SuppressInitialDiagnosticInformation = true;
service.HideCommandPromptWindow = true;
options.AddArguments("test-type");
options.AddArgument("--start-maximized");
return new ChromeDriver(service, options);
case "ie":
case "internetexplorer":
return new InternetExplorerDriver(@"../IE/");
default:
throw new NotImplementedException("Unknown browser string in Config properties " + ConfigProperties.Browser);
}
}
答案 0 :(得分:0)
根据您的更新,您似乎错误地命名了您的步骤。您的功能说:
scenario: Feature Change Password
Given I have created my account
When I Click Reset Password
但您的步骤名称为When_I_click_My_Account
这对我来说似乎不对。
实际上我们需要更多详细信息(比如实际的异常消息),也许还需要BaseTestObject
看起来像什么。
答案 1 :(得分:0)
已解决 - 在BaseTestObject中,我将方法更改为静态。