【问题标题】:How can I run multiple UI tests in a single browser?如何在单个浏览器中运行多个 UI 测试?
【发布时间】:2018-10-17 08:10:40
【问题描述】:

首先:我是一名学生,我正在努力学习 UI 测试(我只了解基础知识)。我想在每次测试后不关闭浏览器的情况下运行多个 UI 测试。我正在使用 TestNG、arquillian 和 graphene,但如果有帮助,我不介意切换到 JUnit。到目前为止我得到的是:

public class ParentTest extends Arquillian
{
}


public class Test2and1 extends ParentTest
{
    @Test(dependsOnGroups = {"test1"})
    public void test2and1()
    {
        assertFalse(driver.getTitle().equals("123"));
    }
}

public class Test1 extends ParentTest
{
    @Test(groups = {"test1"})
    public void test1()
    {
        assertFalse(driver.getTitle().equals("123"));
    }
}

我也尝试过将驱动程序带到超类ParentTest,但结果相同。我搜索了整个互联网,但他们的解决方案似乎不适用于我的情况:(

【问题讨论】:

  • 最佳实践是每次测试使用一个浏览器。它使每次运行都保持干净,并且不同脚本相互影响的可能性较小,从而产生更一致的结果。

标签: java selenium junit testng jboss-arquillian


【解决方案1】:

Arquillion Drone 为 webdriver 管理提供三个生命周期。它们是方法、类和部署级别范围。默认范围是类范围。所以 Webdriver 实例在类级别创建和销毁。

尝试使用具有虚拟部署类的部署范围无人机。这个我没试过。

public class ParentTest extends Arquillian {

   @Deployment(name = "dummydeploy")
   public static Archive deploy() {
      return ShrinkWrap.create(Archive.class);
   }

   @Drone
   @OperateOnDeployment("dummydeploy")
   WebDriver static foo;

}

【讨论】:

  • 您好,谢谢您的解释。这让我更清楚一点。尝试了你告诉我的,但驱动程序保持为空。请参阅我编辑的问题中的代码以了解我的尝试:)
  • 不要用答案编辑问题。这会误导我没有回答你的问题。请恢复原状。我会尝试,并会分享你的工作示例
【解决方案2】:

您可以通过创建单例 webdriver 对象并在测试方法中使用 getter 来解决它:

public class SingletonWebDriver {

    private static WebDriver singletonWebDriver;

    public static WebDriver getDriver() {
        if (singletonWebDriver == null) {
            singletonWebDriver = new ChromeDriver();
        }
        return singletonWebDriver;
    }
}


public class ParentTest extends Arquillian {

        protected WebDriver getDriver() {
            return SingletonWebDriver.getDriver();
        }
    }

public class Test1 extends ParentTest {

        @Test(groups = {"test1"})
        public void test1() {
            assertFalse(getDriver().getTitle().equals("123"));
        }
    }

【讨论】:

  • 当我尝试这个时,我不能再使用石墨烯了。当我尝试运行 Graphene.goTo(AnyPage.class) 时,我收到错误 There is no context available for qualifier org.jboss.arquillian.drone.api.annotation.Default. Available contexts are [].
猜你喜欢
  • 2012-06-20
  • 2014-05-02
  • 1970-01-01
  • 2012-08-03
  • 2018-12-09
  • 1970-01-01
  • 2016-05-30
  • 1970-01-01
  • 2017-09-09
相关资源
最近更新 更多