Selenium java浏览器会话重用

我的问题如下:如何将浏览器会话重用于不同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); } } 

然后我必须使用一些凭据登录到一个网站,并且在记录之后我想要执行其他测试,我不想为每个测试登录,因为我需要制作很多它们并为每个测试登录花了十年时间。 例如,流程如下所示:登录 – >推送某个组件 – >添加一些值 – >生成报告。 比之后我想生成另一个组件的其他报告但是当我尝试它时给出一个空指针exception。 有任何想法吗? 🙂

Selenium 2使用WebDriver可以调用

 driver = new FirefoxDriver(); 

它会生成一个浏览器,并且该浏览器将在测试期间保持打开状态,

或者您可以选择使用driver.Quit()关闭它。

其实我想做什么?

我喜欢在测试之间关闭浏览器窗口,这样我就知道我的测试对于存储的会话数据并不“脏” ,可能会影响测试的运行方式,但我可以看到一些有针对性的测试中的价值,我想尝试一下不同的场景,同时保持相同的会话。

对于代码级别:您可以检查它是否为空。 如果为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配置将某些测试用例用作类级别或测试特定。使用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

我最近想出的一个简单方法是使webdriver在类下保持静态,并在任何其他测试用例中重用相同的webdriver

例如在testcase1中:

 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(); } } 

您应该查看QMetry Automation框架,它通过TestBase提供驱动程序管理。 您不需要创建驱动程序实例,只需在属性或xml配置文件中配置,并使用’getDriver()’调用在任何类中使用驱动程序。

WebDriver driver = WebDriverTestBase.getDriver();

它还有不同的设计概念,如TestPageTestStepDataBeanLocator RepositoryData-Driven Testing Listeners等等。

为了配置驱动程序,您可以在代码之外设置驱动程序名称之类的属性driver.name

driver.name=firefoxDriver

如果要在多个浏览器上并行运行,可以在xml配置文件中提供驱动程序,如:

                

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

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