我正在为我的电子商务公司编写Selenium UI测试。我们使用测试公司信用卡(不幸的是)有信用额度。有时在测试期间会达到信用限额,“用户”将被给予Auth拒绝消息,测试将失败。我想在某处设置一个标志,当设置为true时,将导致使用假信用卡的所有测试将自动失败。
以下是我的代码的基本设置:
Base.java
public class Base
{
public WebDriver driver = null;
public WebDriver getDriver()
{
return new ChromeDriver();
}
}
Page.java
public class Page extends Base
{
By ccField;
By successElement;
public Page(WebDriver driver)
{
this.driver = driver;
ccField = By.id("ccField");
successElement = By.id("success");
}
public boolean sendCreditCard(String num)
{
driver.findElement(ccField).sendKeys(num);
return driver.findElement(successElement).isDisplayed();
}
}
TestBase.java
public class TestBase extends Base
{
@BeforeMethod
public void setup()
{
Base b = new Base();
driver = b.getDriver();
}
@AfterMethod
public void tearDown()
{
driver.quit();
}
}
PageTests.java
public class PageTests extends TestBase
{
Page page;
boolean failedBecauseOfAuth = false;
@BeforeMethod
public void setup()
{
page = new Page(driver);
}
@Test
public void one()
{
// Single ship (for example)
boolean success = page.sendCreditCard("5555555555555555");
Assert.assertTrue(success);
}
@Test
public void two()
{
// Multi ship (for example)
boolean success = page.sendCreditCard("5555555555555555");
Assert.assertTrue(success);
}
}
基本上,如果由于auth拒绝错误导致one
失败,我需要two
在测试开始时自动失败。问题是,每次我设置一个标志(如authFailed = false
作为PageTests.java
的字段,然后在需要时设置authFailed = true
)它会在下一次测试运行开始时重置
答案 0 :(得分:1)
您应该将身份验证与其他逻辑分开,这样您就可以将它放到beforeclass方法中。这将导致两个测试失败。
你可以制作"两个"依赖于" one"。它将导致"两个"失败。虽然这样做不太好,但你应该知道这个功能:
@Test(dependsOnMethods = { "one" })
public void two() {...}
使authFailed静态,因此它将保留每个测试方法的值。
在我看来,最好的解决方案是#1,因为它将逻辑分开。你知道,独立是非常重要的。