Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Session Selenium测试-跨多个测试运行保留会话_Session_Selenium_Selenium Rc - Fatal编程技术网

Session Selenium测试-跨多个测试运行保留会话

Session Selenium测试-跨多个测试运行保留会话,session,selenium,selenium-rc,Session,Selenium,Selenium Rc,我有以下问题。当我开始selenium测试时,要进入执行实际测试的部分,我需要启动浏览器,登录,执行一些其他操作,然后它就会进入我想要测试的部分 有没有办法只做一次第一部分,让会话和浏览器保持打开状态。对于下一次测试运行,只继续此会话,不启动 所以基本上我会有一个测试初始化,并保持会话打开。 以及使用此初始化会话的其他测试,每次都会重用该会话 我正在使用Java和Selenium RC 谢谢 这取决于您的环境。我将C#与Selenium RC一起使用(因此使用NUnit测试框架)。因为您使用Ja

我有以下问题。当我开始selenium测试时,要进入执行实际测试的部分,我需要启动浏览器,登录,执行一些其他操作,然后它就会进入我想要测试的部分

有没有办法只做一次第一部分,让会话和浏览器保持打开状态。对于下一次测试运行,只继续此会话,不启动

所以基本上我会有一个测试初始化,并保持会话打开。 以及使用此初始化会话的其他测试,每次都会重用该会话

我正在使用Java和Selenium RC


谢谢

这取决于您的环境。我将C#与Selenium RC一起使用(因此使用NUnit测试框架)。因为您使用Java(可能还有JUnit),所以它的工作方式是相同的。 JUnit和NUnit都允许您指定在每个测试之前、每个测试之后、每个套件之前或每个套件之后执行的特殊代码

在您的例子中,您希望提供在套件(套件只是一个命名空间(C#)或类(Java)中所有测试用例的集合)之前运行的代码。在C#中,我使用这样的代码——指令让NUnit将其识别为套件设置代码

   [TestFixtureSetUp]
    public void SetupTest()
    {
        selenium = Setup.StartSelenium();
        Setup.Login();
        Setup.Preliminaries();
    }
Java中的等效名称是使用属性,如中所示

public class Example {
    @BeforeClass
    public static void onlyOnce() {
       ...
    }
 }
我最近的文章非常关注C,但它可能会为您提供一些可以应用于Java工作的一般想法。

我建议使用它,让您可以使用Java注释进行预处理,例如仅在类或测试套件之前调用某些代码,分别使用@BeforeClass和@BeforeSuite。 在这里,您可以定义selenium服务器实例化,浏览器调用在测试套件类之前完成(也有许多其他选项可用),然后可以在后续测试方法中重复使用。

一行: 您可以使用firefox配置文件来实现这一点

详细内容: 1.手动登录firefox(如果有,请使用网站的“记住我”选项,否则就可以了) 2.进入Firefox菜单>帮助>疑难解答信息>配置文件文件夹(单击它)。 3.当您调用SeleniumWebDriver(但不确定RC)时,请使用以下命令

ProfilesIni profileIni = new ProfilesIni();
FirefoxProfile profile = profileIni.getProfile("<YOUR PATH TO FF PROFILE FROM STEP 2>");
this.driver = new FirefoxDriver(profile);
ProfilesIni profileIni=newprofilesini();
FirefoxProfile profile=profileIni.getProfile(“”);
this.driver=新的FirefoxDriver(配置文件);

这样,您将直接登录到您的帐户。这也更快,因为许多数据都是从浏览器缓存中提取的,不像新鲜的firefox配置文件那样

您误解了我的问题。我不想在类之前运行init代码:)让我们假设我们有一个长init。我想做的是,在一个测试用例中编写init,进行测试,但不关闭浏览器窗口并重用会话。因此,当我运行另一个测试MyTestUsesInitsSession时,它会连接到已经打开的会话,并继续完成工作。就像当你试着看一把刀是否能切割不同的东西。你造一次桌子,只换刀子和可切割的东西。对不起,我举了个愚蠢的例子:)恕我直言,我想你误解了我的答案:-),因为它正好提供了你想要的。我怀疑你对这个术语很反感。将该类视为在长init之后要运行的所有测试的容器,该类中指定的方法是单独的测试。init运行,然后所有测试都运行,而无需再次运行init。如果需要进一步澄清,一定要问更多的问题。嗯,还是误解:)。我在构建测试,所以测试测试,开发测试。我想在初始化之后运行一个测试。因为我正在构建一个测试。所以有一次我想用“点击这里”来运行它,如果在下一次运行时,我将代码更改为“点击那个”,然后我想再次运行它,而不重新运行初始化代码。好的,我误解了:-)我以为你有几个测试要和一个初始化一起运行。唉,我的解决方案不包括您的情况。我想做的是创建测试,而不是运行测试。这意味着我将在开发测试时使用sessionreuse,而不是在实际运行测试时。仅用于调试。您可以在测试开发期间使用它。为什么您不想在测试执行期间使用它呢?我正在使用它,但这还不够。您是否阅读了我的其他评论,就在上面?我确实阅读了:),但不确定您为什么不想在运行测试时使用它。根据我上面提到的评论,您确实可以重用会话。无论您是想在调试期间还是在执行test.Testng时使用它,我只想加快测试创建的调试。我想创建浏览器和webapp的初始化状态,每次运行测试时,我都想从服务器获取这个selenium会话。