【问题标题】:Junit automation test in sequential order按顺序进行的 Junit 自动化测试
【发布时间】:2017-03-16 16:16:23
【问题描述】:

我在 Java 的一个类中创建了 Junit 测试。基本上一个类在该类中有多个测试测试用例,当测试运行时,chrome 页面会出现一个空白页。对于它重置的每个@test senario,它都会出现故障等情况,它会启动另一个chrome页面而不是在同一页面内执行每个测试并进入下一个测试,依此类推。当我在(一个@test case)中运行这一切时,它工作正常。

我使用量角器和编程方式与 describesits 相同,没有问题。我正在尝试使用 Junit 在 Java 中做同样的事情,所以如果测试用例失败,我可以快速转到那个测试用例。我有一个@Before 和@Test 和@after 注释

请帮助我对 Java 没有经验。我的代码如下。

 public class BankrateAlt {
  private WebDriver driver;
  private String baseUrl;
  private boolean acceptNextAlert = true;
  private StringBuffer verificationErrors = new StringBuffer();

  @Before
  public void setUp() throws Exception {
    System.setProperty("webdriver.chrome.driver", "C:\\eclipse\\Java\\chromedriver\\chromedriver.exe");  
    System.setProperty("webdriver.gecko.driver", "C:\\eclipse\\Java\\geckodriver\\geckodriver.exe");  
    driver = new ChromeDriver();
    baseUrl = "http://www.bankrate.com/";
    driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
  }

  @Test 
  public void moveToElementMortgages() throws InterruptedException{
      Actions builder = new Actions(driver);
      WebElement element = driver.findElement(By.linkText("MORTGAGES"));
      builder.moveToElement(element).perform();
      Thread.sleep(2000);
  }

  @Test 
  public void clickOnCalculators() throws InterruptedException{
      Actions builder = new Actions(driver);
      WebElement calculator = driver.findElement(By.cssSelector("a[href*='mortgage-calculators']"));
      builder.moveToElement(calculator).perform();
      calculator.click();
      Thread.sleep(2000);
  }

  @Test 
  public void nextPageScrollDown() throws InterruptedException{ 
      ((JavascriptExecutor)driver).executeScript("scroll(0, 400)");
      Thread.sleep(2000);
  }

  @Test 
  public void clickMorgageLoanPaymentCalc() throws InterruptedException{  

      WebElement MorgageCalc = driver.findElement(By.linkText("Mortgage loan payment calculator"));  
      MorgageCalc.click();
      Thread.sleep(2000);
  }

  @Test 
  public void scrollDownCalcPage() throws InterruptedException{  

      ((JavascriptExecutor)driver).executeScript("scroll(0, 400)");
        Thread.sleep(2000);
  }

  @Test 
  public void clearMortgageSendKeys() throws InterruptedException{  

      WebElement MortgageField = driver.findElement(By.id("KJE-LOAN_AMOUNT"));
      MortgageField.clear();
      Thread.sleep(1000);

      WebElement LoanAmount = driver.findElement(By.name("LOAN_AMOUNT"));
      LoanAmount.sendKeys("$240,000");
      Thread.sleep(3000);
  }

【问题讨论】:

    标签: java selenium junit


    【解决方案1】:

    JUnit 不会按顺序运行测试,因为单元测试应该能够独立运行(因此可以按任何顺序运行)。

    这是一个简单的修复,但您可以做的是从所有方法中删除所有 @Test 注释并添加以下测试:

    @Test 
    public void fullTest() {
      moveToElementMortgages();
      clickOnCalculators();
      nextPageScrollDown(); 
      clickMorgageLoanPaymentCalc();
      scrollDownCalcPage();
      clearMortgageSendKeys();
    }
    

    如果您想以更精致的方式执行此操作,请阅读Page Object pattern。或者更新的Screenplay pattern

    【讨论】:

    • 我现在遇到的问题是页面出现但没有自动转到网址,我必须在第一步输入吗?
    • 我通过在第 1 步之前添加另一个 @test 注释来解决此问题,方法是指示 webdriver 首先转到 url...感谢您的所有帮助:)。
    【解决方案2】:

    对于一个永远不需要的单元测试,但您有一个集成测试工作流程,这对于获取更多细节失败很有用。

    您可以在测试类上使用FixMethodOrder 注释,但您需要以正确的方式命名您的方法。我建议为您当前的名称添加前缀,例如 step1_step2_ 等。

    @FixMethodOrder(MethodSorters.NAME_ASCENDING)
    public class BankrateAlt {
      @Test 
      public void step1_moveToElementMortgages() {…}
      @Test
      public void step2_clickOnCalculators() {…}
      …
    }
    

    由于设置是按方法完成的,您必须切换到 @BeforeClass 的每个类行为一个(必须是静态的)。

    【讨论】:

    • 在 Eclipse 中,当我使用 @FixMethodOrder(MethodSorters.NAME_ASCENDING) 我得到“方法排序不能定义到变量”
    • 我现在遇到的问题是页面出现但没有自动转到网址,我必须在第一步输入吗?
    • 我通过在第 1 步之前添加另一个 @test 注释来解决此问题,方法是指示 webdriver 首先转到 url...感谢您的所有帮助:)。
    • 嗯,你确定你在之前的改动中没有丢弃任何东西吗? baseUrl 无处使用...
    • 嘿,我又添加了 5 个 @test 注释,它们不再按顺序排列,我该如何修复?
    【解决方案3】:

    @Before 在每个@Test 方法之前执行 @BeforeClass 是你想要的。

    @BeforeClass
    public static void setUpBeforeClass() throws Exception { 
    
    }
    

    要运行排序的测试,您可以使用@FixMethodOrder 注释。

    【讨论】:

    • 我现在遇到的问题是页面出现但没有自动转到网址,我必须在第一步输入吗?
    • 我通过在第 1 步之前添加另一个 @test 注释来解决此问题,方法是指示 webdriver 首先转到 url...感谢您的所有帮助:)。
    猜你喜欢
    • 2020-04-17
    • 1970-01-01
    • 1970-01-01
    • 2011-04-17
    • 2012-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多