繁体   English   中英

Selenium Java 浏览器会话重用

[英]Selenium java Browser session reuse

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

然后我必须使用一些凭据登录一个网站,在它被记录后我想执行其他测试,我不想为每个测试登录,因为我需要为每个测试创建和登录很多花十年。 例如,流程如下所示:登录->推送一些组件->添加一些值->生成报告。 在此之后,我想在另一个组件上生成其他报告,但是当我尝试它时会给出一个空指针异常。 有任何想法吗? :)

在带有 WebDriver 的Selenium 2 ,您可以调用

driver = new FirefoxDriver();

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

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

其实我想做什么?

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

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

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

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

WebDriver driver = WebDriverTestBase.getDriver();

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

为了配置驱动程序,您可以在代码外部设置属性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中的所有测试。 您不需要在代码中创建或创建驱动程序对象

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM