我的问题如下:如何将浏览器会话重用于不同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);
}
}
然后我必须使用一些凭据登录网站,在记录之后我想要执行其他测试,我不想为每个测试登录,因为我需要很多这些测试制作和登录每个将需要十年。例如,流程如下所示:登录 - >按下某个组件 - >添加一些值 - >生成报告。比之后我想生成另一个组件的其他报告,但当我尝试它时给出一个空指针异常。有任何想法吗? :)
答案 0 :(得分:2)
在使用WebDriver的Selenium 2
中,您可以调用
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 :(得分:1)
我最近想出的一个简单方法是使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(<URL>);
}
}
答案 2 :(得分:0)
您应该检查QMetry Automation framework它通过TestBase提供驱动程序管理。您不需要创建驱动程序实例,只需在属性或xml配置文件中进行配置,并使用&#39; getDriver()&#39;在任何类中使用驱动程序。呼叫。
WebDriver driver = WebDriverTestBase.getDriver();
它还有不同的设计概念,例如 TestPage , TestStep , DataBean , {{ 3}} , Locator Repository Data-Driven Testing 等等。
为了配置驱动程序,您可以在代码外部设置属性driver.name
,其驱动程序名称为
driver.name=firefoxDriver
如果要并行运行多个浏览器,可以在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
并行运行所有测试。 您不需要在代码中创建或完全驱动对象。
如果驱动程序创建失败,它还具有重试机制,这在您在云上运行测试时非常有用。