快速打开新标签并随机导航Selenium

时间:2016-06-21 20:01:13

标签: javascript selenium selenium-chromedriver

我正在设计一些针对网络过滤器运行的测试,并提出了大量流量同时到达过滤器的边缘情况。我知道在Selenium中我可以在页面上找到一个随机链接(链接选择器+一个随机数)并使用它来转到另一个页面。但是,有没有办法可以同时为50个标签执行此操作?测试的要点是打开50个标签并随机浏览每个页面上的链接以模拟比平时更重的负载(数量可能会有所不同,仅举例)。

到目前为止,我所能提出的是一个短循环,它将通过JavaScript打开50个标签,然后单独浏览标签并导航到其他地方。

@Test(timeout=1000000)
public void testHeavyUsageTraffic() throws Exception {
    driver.get("http://**********.com");
    Random rand = new Random();
    WebElement randomLinkGenerator = driver.findElement(By.tagName("a"));

    //Open several tabs to simulate increased load
    ((JavascriptExecutor)driver).executeScript("for (i = 0; i< 50;i++) { document.getElementsByTagName('a')[0].click(); }");

    for (int i = 0; i < 5; i++) {
        System.out.print("\nIteration " + (i + 1));
        for (String window : driver.getWindowHandles()) {
            //Switch to the next window and click the link to generate a random url request
            driver.switchTo().window(window);
            System.out.print("\n" + driver.getTitle());
            List<WebElement> links = driver.findElements(By.tagName("a"));
            System.out.print(" - # of Links: " + links.size());

            //If no links are found on the page, skip to the next window
            if (links.size() <= 0) {
                driver.close();
                continue;
            }

            //Randomly choose a link from the page and open it
            int randomInt = rand.nextInt(links.size());
            System.out.print(" - #" + randomInt + " was randomly chosen");

            try {
                links.get(randomInt).click();
            }
            catch (Exception e) {
                System.out.print(" - Link was not clickable");
                continue;
            }
        }
    }
    //TODO: REMOVE THIS
    Thread.sleep(10000);

    //Check for filtered traffic here...
    //assert(checkFilteredTraffic("http://filtered-site.com"));
}

但是,这非常慢。 50个标签的原始开放非常快(JavaScript),但用于在标签之间切换和选择链接的Java非常慢。我假设这与Chrome驱动程序有关,或者只是Selenium如何处理多个窗口。

有谁知道如何更好地处理这个问题?重申一下,我希望能够模拟繁重的网络负载,然后在最后检查过滤后的站点,以确保在系统负载超过正常情况时它不会漏过。

编辑:我知道负载测试机制,但这个测试应该包含在Selenium测试用例中。

如果我应该包含其他内容,请告诉我。谢谢!

0 个答案:

没有答案