2016-03-22 51 views
2

我的问题如下:我如何重用浏览器会话用于不同java类中的测试?我有浏览器这样的开放:Selenium java浏览器会话重用

public class OpenBrowser { 

    public static WebDriver driver; 

    @BeforeSuite 
    public static void openb() { 
     // Create a new instance of the Firefox driver 
     driver = new FirefoxDriver(); 
     driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); 
    } 
} 

然后,我必须使用一些凭据登录到网站和它的记录后,我想执行其他测试,我不希望记录在每一个测试,因为有我需要制作和登录的许多应用程序需要十年时间。例如,流程如下所示:登录 - >推入某个组件 - >添加一些值 - >生成报告。在此之后,我想生成另一个组件的其他报告,但是当我尝试给它一个空指针异常。有任何想法吗? :)

回答

2

Selenium 2你可以拨打

driver = new FirefoxDriver(); 

其中产生一个webdriver的浏览器,而浏览器将继续开放,为您的测试期间,

,或者你可以选择与关闭driver.Quit()

其实我想要做什么?

我喜欢关闭测试之间我的浏览器窗口,这样我才知道我的测试是不是会影响测试的运行存储的会话数据“脏”,但我可以在一些有针对性的测试中看到价值,我希望在保持相同会话进行的同时尝试几个不同的场景。

对于代码级别:你可以检查它是否为null。如果为null,则调用浏览器给另一个。

/** 
* Driver for web application. 
* 
* @return driver Browser 
* @throws IOException 
*/ 
public WebDriver getDriverBrowser() throws IOException { 

if (driverBrowser == null) { 
    String sBrowser = PropertyLoader.loadProperty("browser"); 
    driverBrowser = getBrowser(sBrowser); 
    driverBrowser 
      .manage() 
      .timeouts() 
      .implicitlyWait(
        Integer.valueOf(PropertyLoader 
          .loadProperty("implicit_timeout_sec")), 
        TimeUnit.SECONDS); 
    driverBrowser.manage().window().maximize(); 
} 
return driverBrowser; 
} 

或者您可以使用XML配置使用一些测试用例类级别或测试specific.Using TestNG的,你可以指定要运行(该测试TestNG will generate an XML file of all of the tests that fail, so when you run it, it will only execute the failed tests)

问题 - 1 :我的意思是我不想再次登录继续测试,我不介意 如果它打开另一个窗口,实际上如你所说它更可靠,但 没有帮助,如果我必须再次登录。

如果您不想登录,那么在每个测试用例中,您都需要一个基本起点。结尾的测试用例后,它会去基地的位置和未来的测试用例会从基础开始

问题 - 2:我如何能实现基本的出发点?

这取决于你。首先,您必须分析测试用例,然后您必须选择哪个点可以作为所有或部分测试用例的起点。然后你可以做到。

更多:

  1. https://github.com/seleniumhq/selenium-google-code-issue-archive/issues/3927
  2. https://sqa.stackexchange.com/questions/1988/selenium-reuse-existing-browser-session-instead-of-opening-new-windows
+0

但是使用driver = new FirefoxDriver(); ,会产生一个新的窗口还是新的会话?它会保留旧会话吗?我的意思是我不想再次登录继续测试,我不介意它是否会打开另一个窗口,事实上,正如您所说的那样,如果我必须再次登录,它更可靠但无用。谢谢! –

+0

如果你不想登录,那么在每个测试用例中,你都需要一个基础起点。结束任何测试用例后,它将转到基准位置,下一个测试用例将从基准位置开始。 @lapusanmirel – SkyWalker

+0

我如何实现基本的起点?谢谢你的答案:) @SkyWalker –

0

您应该检查与QMetry Automation framework它通过TestBase提供的驱动程序管理。您不需要创建驱动程序实例,只需在property或xml配置文件中配置,并使用'getDriver()'调用在任何类中使用驱动程序。

WebDriver driver = WebDriverTestBase.getDriver();

它也有不同的设计概念,如TestPage一步步测试DataBeanLocator RepositoryData-Driven TestingListeners等等。

为了配置驱动程序,您可以像

driver.name=firefoxDriver

设置属性driver.name与驱动程序名称的代码之外。如果你想在多个浏览器并行,你可以像XML配置文件中提供的驱动程序运行:

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"> 
<suite name="QAF-Gherkin-Demo" verbose="0" parallel="methods" thread-count="10"> 
    <test name="Run_on_FF"> 
     <parameter name="driver.name" value="firefoxDriver"/> 
     <packages> 
      <package name="my.pkg"/> 
     </packages> 
    </test> 
    <test name="Run_on_chrome"> 
     <parameter name="driver.name" value="chromeDriver"/> 
     <packages> 
      <package name="my.pkg"/> 
     </packages> 
    </test> 
</suite> 

在上面的例子中,它将在my.pkg并行运行在两个不同的浏览器中的所有测试。 您不需要在您的代码中创建或完全驱动程序对象

如果驱动程序创建失败,它还具有重试机制,当您在云上运行测试时这非常有用。

1

一个我最近想出简单的方法就是让webdriver的静态课下和在任何其他测试用例

例如在testcase1重复使用相同的webdriver:

public class globallogin { 
    static WebDriver driver = new ChromeDriver(); 
} 

现在你可以在测试用例2中调用相同的webdriver:

public class skucategory { 

    static globallogin login = new globallogin(); 

    public static void main(String[] args) { 
     login.driver.get(<URL>); 
    } 
} 
+0

例如在testcase1中: 公共类globallogin静态WebDriver驱动程序= new ChromeDriver(); } 现在您可以在测试用例2中调用相同的webdriver: public class skucategory static globallogin login = new globallogin(); \t \t 公共静态无效的主要(字串[] args){ \t \t \t \t login.driver.get(); \t \t \t \t \t}} –

相关问题