我的问题如下:如何在不同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); } }
然后,我必须使用一些凭据登录网站,并在登录后想执行其他测试,所以我不想为每个测试都登录,因为我需要进行很多测试并为每个用户登录花十年时间。例如,流程如下所示:登录->推送一些组件->添加一些值->生成报告。在此之后,我想在另一个组件上生成其他报告,但是当我尝试使用它时,将给出一个空指针异常。有任何想法吗?:)
在Selenium 2WebDriver中,您可以调用
Selenium 2
driver = new FirefoxDriver();
会产生一个浏览器,并且该浏览器将在测试期间保持打开状态,
或者您可以选择用关闭它driver.Quit()。
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配置将某些测试用例用作类级别或特定于测试的测试。使用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)。
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: 如何实现基本起点?
它是由你决定。首先,您必须分析测试用例,然后必须选择哪个点可以作为所有或某些测试用例集的起点。然后就可以做到。
有关更多: