Package com.crawljax.core.configuration.CrawljaxConfiguration

Examples of com.crawljax.core.configuration.CrawljaxConfiguration.CrawljaxConfigurationBuilder


  }

  @Test(timeout = 60_000)
  public void whenStopIsCalledTheCrawlerStopsGracefully() throws Exception {
    CrawljaxConfigurationBuilder builder = SERVER.newConfigBuilder("infinite.html");

    CrawljaxRunner runner = new CrawljaxRunner(builder.setUnlimitedCrawlDepth()
            .setUnlimitedCrawlDepth()
            .setUnlimitedStates()
            .build());

    ExecutorService executor = Executors.newSingleThreadExecutor();
View Full Code Here


  }

  @Test(timeout = 60_000)
  public void whenCrawljaxIsShutDownByAPluginItShutsDown() throws Exception {
    CrawljaxConfigurationBuilder builder = SERVER.newConfigBuilder("infinite.html");

    CrawljaxRunner runner = new CrawljaxRunner(builder.setUnlimitedCrawlDepth()
            .addPlugin(new OnNewStatePlugin() {

              private int count = 0;

              @Override
View Full Code Here

  @ClassRule
  public static final RunWithWebServer WEB_SERVER = new RunWithWebServer("site");

  @Test
  public void testPopups() throws CrawljaxException {
    CrawljaxConfigurationBuilder builder =
            CrawljaxConfiguration.builderFor(WEB_SERVER.getSiteUrl().resolve("popup"));
    builder.setMaximumDepth(3);
    builder.crawlRules().click("a");
    builder.crawlRules().waitAfterEvent(100, TimeUnit.MILLISECONDS);
    builder.crawlRules().waitAfterReloadUrl(100, TimeUnit.MILLISECONDS);
    CrawljaxRunner runner = new CrawljaxRunner(builder.build());
    CrawlSession session = runner.call();
    assertThat(session.getStateFlowGraph(), hasEdges(2));
    assertThat(session.getStateFlowGraph(), hasStates(3));
  }
View Full Code Here

    }

  }

  private CrawljaxConfiguration readConfig(String urlValue, String outputDir) {
    CrawljaxConfigurationBuilder builder = CrawljaxConfiguration.builderFor(urlValue);

    builder.setOutputDirectory(new File(outputDir));

    BrowserType browser = BrowserType.FIREFOX;
    if (options.specifiesBrowser()) {
      browser = options.getSpecifiedBrowser();
    }

    int browsers = 1;
    if (options.specifiesParallelBrowsers()) {
      browsers = options.getSpecifiedNumberOfBrowsers();
    }
    if (browser == BrowserType.REMOTE) {
      String remoteUrl = options.getSpecifiedRemoteBrowser();
      builder.setBrowserConfig(BrowserConfiguration.remoteConfig(browsers, remoteUrl));
    } else {
      builder.setBrowserConfig(new BrowserConfiguration(browser, browsers));
    }

    if (options.specifiesDepth()) {
      builder.setMaximumDepth(options.getSpecifiedDepth());
    }

    if (options.specifiesMaxStates()) {
      builder.setMaximumStates(options.getMaxStates());
    }

    if (options.requestsCrawlHiddenAnchors()) {
      builder.crawlRules().crawlHiddenAnchors(true);
    }

    configureTimers(builder);

    builder.addPlugin(new CrawlOverview());

    if (options.specifiesClickElements()) {
      builder.crawlRules().click(options.getSpecifiedClickElements());
    } else {
      builder.crawlRules().clickDefaultElements();
    }

    return builder.build();
  }
View Full Code Here

        Configuration config = configurations.findByID(record.getConfigurationId());
        record.setCrawlStatus(CrawlStatusType.initializing);
        LogWebSocketServlet.sendToAll("init-" + Integer.toString(crawlId));

        // Build Configuration
        CrawljaxConfigurationBuilder builder =
                CrawljaxConfiguration.builderFor(config.getUrl());
        builder.setBrowserConfig(new BrowserConfiguration(config.getBrowser(), config
                .getNumBrowsers()));

        if (config.getMaxDepth() > 0)
          builder.setMaximumDepth(config.getMaxDepth());
        else
          builder.setUnlimitedCrawlDepth();

        if (config.getMaxState() > 0)
          builder.setMaximumStates(config.getMaxState());
        else
          builder.setUnlimitedStates();

        if (config.getMaxDuration() > 0)
          builder.setMaximumRunTime(config.getMaxDuration(), TimeUnit.MINUTES);
        else
          builder.setUnlimitedRuntime();

        builder.crawlRules().clickOnce(config.isClickOnce());
        builder.crawlRules().insertRandomDataInInputForms(config.isRandomFormInput());
        builder.crawlRules().waitAfterEvent(config.getEventWaitTime(),
                TimeUnit.MILLISECONDS);
        builder.crawlRules().waitAfterReloadUrl(config.getReloadWaitTime(),
                TimeUnit.MILLISECONDS);

        // Click Rules
        if (config.isClickDefault())
          builder.crawlRules().clickDefaultElements();
        else if (config.getClickRules().size() > 0) {
          for (ClickRule r : config.getClickRules()) {
            CrawlElement element;
            if (r.getRule() == RuleType.click)
              element = builder.crawlRules().click(r.getElementTag());
            else
              element = builder.crawlRules().dontClick(r.getElementTag());

            if (r.getConditions().size() > 0) {
              for (com.crawljax.web.model.Condition c : r.getConditions()) {
                if (c.getCondition().toString().startsWith("w")) {
                  switch (c.getCondition()) {
                    case wAttribute:
                      String[] s =
                              c.getExpression().replace(" ", "").split("=");
                      element.withAttribute(s[0], s[1]);
                      break;
                    case wText:
                      element.withText(c.getExpression());
                      break;
                    case wXPath:
                      element.underXPath(c.getExpression());
                      break;
                    default:
                      break;
                  }
                } else
                  element.when(getConditionFromConfig(c));
              }
            }
          }
        }

        // Form Input
        if (config.getFormInputValues().size() > 0) {
          InputSpecification input = new InputSpecification();
          for (NameValuePair p : config.getFormInputValues())
            input.field(p.getName()).setValue(p.getValue());
          builder.crawlRules().setInputSpec(input);
        }

        // Crawl Conditions
        if (config.getPageConditions().size() > 0) {
          for (com.crawljax.web.model.Condition c : config.getPageConditions()) {
            builder.crawlRules().addCrawlCondition(
                    c.getCondition().toString() + c.getExpression(),
                    getConditionFromConfig(c));
          }
        }

        // Invariants
        if (config.getInvariants().size() > 0) {
          for (com.crawljax.web.model.Condition c : config.getInvariants()) {
            builder.crawlRules().addInvariant(
                    c.getCondition().toString() + c.getExpression(),
                    getConditionFromConfig(c));
          }
        }

        // Comparators
        if (config.getComparators().size() > 0)
          setComparatorsFromConfig(config.getComparators(), builder.crawlRules());

        //Plugins
        File outputFolder = new File(record.getOutputFolder() + File.separatorChar + "plugins"
                + File.separatorChar + "0");
        outputFolder.mkdirs();
        builder.addPlugin(new CrawlOverview(new HostInterfaceImpl(outputFolder, new HashMap<String, String>())));
        for (int i = 0, l = config.getPlugins().size(); i < l; i++) {
          Plugin pluginConfig = config.getPlugins().get(i);
          Plugin plugin = plugins.findByID(pluginConfig.getId());
          if (plugin == null) {
            LogWebSocketServlet.sendToAll("Could not find plugin: "
                    + pluginConfig.getId());
            continue;
          }
          if(!plugin.getCrawljaxVersions().contains(Main.getCrawljaxVersion())) {
            LogWebSocketServlet.sendToAll("Plugin "
                + pluginConfig.getId() + " is not compatible with this version of Crawljax (" + Main.getCrawljaxVersion() + ")");
            continue;
          }
          String pluginKey = String.valueOf(i + 1);
          outputFolder = new File(record.getOutputFolder() + File.separatorChar + "plugins"
                  + File.separatorChar + pluginKey);
          outputFolder.mkdirs();
          Map<String, String> parameters = new HashMap<>();
          for (Parameter parameter : plugin.getParameters()) {
            parameters.put(parameter.getId(), "");
            for (Parameter configParam : pluginConfig.getParameters()) {
              if (configParam.getId().equals(parameter.getId()) && configParam.getValue() != null) {
                parameters.put(parameter.getId(), configParam.getValue());
              }
            }
          }
          HostInterface hostInterface = new HostInterfaceImpl(outputFolder, parameters);
          com.crawljax.core.plugin.Plugin instance =
                  plugins.getInstanceOf(plugin, resourceDir, hostInterface);
          if (instance != null) {
            builder.addPlugin(instance);
            record.getPlugins().put(pluginKey, plugin);
          }
        }

        // Build Crawljax
        CrawljaxRunner crawljax = new CrawljaxRunner(builder.build());

        // Set Timestamps
        timestamp = new Date();
        record.setStartTime(timestamp);
        record.setCrawlStatus(CrawlStatusType.running);
View Full Code Here

  /**
   * retrieve / build the CrawljaxConfiguration for the given arguments.
   */
  protected CrawljaxConfiguration getCrawljaxConfiguration() {

    CrawljaxConfigurationBuilder builder =
      CrawljaxConfiguration.builderFor(WEB_SERVER.getSiteUrl());
    builder.crawlRules().waitAfterEvent(getTimeOutAfterEvent(), TimeUnit.MILLISECONDS);
    builder.crawlRules()
         .waitAfterReloadUrl(getTimeOutAfterReloadUrl(), TimeUnit.MILLISECONDS);
    builder.setMaximumDepth(3);
    builder.crawlRules().clickOnce(true);

    builder.setBrowserConfig(getBrowserConfiguration());

    addCrawlElements(builder);

    builder.crawlRules().setInputSpec(getInputSpecification());

    addCrawlConditions(builder);
    addOracleComparators(builder);
    addInvariants(builder);
    addWaitConditions(builder);
    addPlugins(builder);

    return builder.build();
  }
View Full Code Here

  private static CrawlSession session;

  @BeforeClass
  public static void setup() {
    CrawljaxConfigurationBuilder builder = SERVER.newConfigBuilder("/crawler/");

    builder.crawlRules().clickDefaultElements();

    /**
     * Add a sample Invariant for testing the OnInvariantViolation plugin
     */
    builder.crawlRules().addInvariant("Never contain Final state S8",
            new NotRegexCondition("Final state S2"));

    builder.addPlugin(new PreCrawlingPlugin() {

      @Override
      public void preCrawling(CrawljaxConfiguration config) {
        plugins.add(PreCrawlingPlugin.class);

      }
    });

    builder.addPlugin(new OnNewStatePlugin() {
      @Override
      public void onNewState(CrawlerContext context, StateVertex state) {
        plugins.add(OnNewStatePlugin.class);

        if (!state.getName().equals("index")) {
          assertTrue("currentState and indexState are never the same",
                  !state.equals(context.getSession().getInitialState()));
        }
      }
    });

    builder.addPlugin(new DomChangeNotifierPlugin() {

      @Override
      public boolean isDomChanged(CrawlerContext context, String domBefore, Eventable e,
              String domAfter) {

        plugins.add(DomChangeNotifierPlugin.class);
        return !domAfter.equals(domBefore);

      }

    });

    builder.addPlugin(new OnBrowserCreatedPlugin() {

      @Override
      public void onBrowserCreated(EmbeddedBrowser newBrowser) {
        plugins.add(OnBrowserCreatedPlugin.class);
        assertNotNull(newBrowser);
      }
    });

    builder.addPlugin(new OnInvariantViolationPlugin() {

      @Override
      public void onInvariantViolation(Invariant invariant, CrawlerContext context) {
        plugins.add(OnInvariantViolationPlugin.class);

        assertNotNull(invariant);

      }
    });

    builder.addPlugin(new OnUrlLoadPlugin() {

      @Override
      public void onUrlLoad(CrawlerContext browser) {
        plugins.add(OnUrlLoadPlugin.class);
        assertNotNull(browser);
      }
    });

    builder.addPlugin(new PostCrawlingPlugin() {

      @Override
      public void postCrawling(CrawlSession session, ExitStatus status) {
        plugins.add(PostCrawlingPlugin.class);

      }
    });

    builder.addPlugin(new PreStateCrawlingPlugin() {

      @Override
      public void preStateCrawling(CrawlerContext session,
              ImmutableList<CandidateElement> candidateElements, StateVertex state) {
        plugins.add(PreStateCrawlingPlugin.class);
        try {
          assertNotNull(candidateElements);

        } catch (AssertionError e) {
          ERRORS.addError(e);
        }

        if (state.getName().equals("state8")) {
          /**
           * Add to miss invocation for the OnFireEventFaild plugin.
           */
          // This is a bit ugly; but hey it works, and is checked above..
          CandidateElement candidate = candidateElements.get(0);
          HTMLAnchorElementImpl impl = (HTMLAnchorElementImpl) candidate.getElement();
          impl.setName("fail");
          impl.setId("eventually");
          impl.setHref("will");
          impl.setTextContent("This");
          candidate.getIdentification().setValue("/HTML[1]/BODY[1]/FAILED[1]/A[1]");
        }
      }

    });

    builder.addPlugin(new OnRevisitStatePlugin() {

      @Override
      public void onRevisitState(CrawlerContext session, StateVertex currentState) {
        plugins.add(OnRevisitStatePlugin.class);

        assertNotNull(currentState);
      }
    });

    config = builder.build();
    controller = new CrawljaxRunner(config);
    session = controller.call();

    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < plugins.size(); i++) {
View Full Code Here

  public static final RunWithWebServer SERVER = new RunWithWebServer("site");

  @Before
  public void setup() {

    CrawljaxConfigurationBuilder builder = SERVER.newConfigBuilder("crawler/index.html");
    builder.addPlugin(new PreStateCrawlingPlugin() {

      @Override
      public void preStateCrawling(CrawlerContext session,
              ImmutableList<CandidateElement> candidateElements, StateVertex state) {
        for (CandidateElement candidate : candidateElements) {
          HTMLAnchorElementImpl impl = (HTMLAnchorElementImpl) candidate.getElement();
          impl.setName("fail");
          impl.setId("eventually");
          impl.setHref("will");
          impl.setTextContent("This");
          candidate.getIdentification().setValue("/HTML[1]/BODY[1]/FAILED[1]/A[1]");
        }
      }
    });
    builder.addPlugin(new OnFireEventFailedPlugin() {
      @Override
      public void onFireEventFailed(CrawlerContext context, Eventable eventable,
              List<Eventable> pathToFailure) {
        hits.incrementAndGet();
      }
    });

    controller = new CrawljaxRunner(builder.build());
  }
View Full Code Here

  /**
   * Run this method to start the crawl.
   */
  public static void main(String[] args) {
    CrawljaxConfigurationBuilder builder =
            CrawljaxConfiguration.builderFor("http://demo.crawljax.com/");

    // Add the invariant that checks that the string isn't present.
    builder.crawlRules().addInvariant(
            "Detect a string",
            new NotRegexCondition(
                    "Invariants can be used to perform tests on the current state"));

    // This plugin will just print the error.
    builder.addPlugin(new OnInvariantViolationPlugin() {

      @Override
      public void onInvariantViolation(Invariant invariant, CrawlerContext context) {
        LOG.error("\n\n!!! Invariant {} violated !!!\n", invariant);
      }

    });

    CrawljaxRunner crawljax = new CrawljaxRunner(builder.build());
    crawljax.call();
  }
View Full Code Here

   *
   * @throws IOException
   *             when the output folder cannot be created or emptied.
   */
  public static void main(String[] args) throws IOException {
    CrawljaxConfigurationBuilder builder = CrawljaxConfiguration.builderFor(URL);
    builder.crawlRules().insertRandomDataInInputForms(false);

    // click these elements
    builder.crawlRules().clickDefaultElements();
    builder.crawlRules().click("div");

    builder.setMaximumStates(10);
    builder.setMaximumDepth(3);
    builder.crawlRules().clickElementsInRandomOrder(true);

    // Set timeouts
    builder.crawlRules().waitAfterReloadUrl(WAIT_TIME_AFTER_RELOAD, TimeUnit.MILLISECONDS);
    builder.crawlRules().waitAfterEvent(WAIT_TIME_AFTER_EVENT, TimeUnit.MILLISECONDS);

   
    // We want to use two browsers simultaneously.
    builder.setBrowserConfig(new BrowserConfiguration(BrowserType.FIREFOX, 1));

    CrawljaxRunner crawljax = new CrawljaxRunner(builder.build());
    crawljax.call();

  }
View Full Code Here

TOP

Related Classes of com.crawljax.core.configuration.CrawljaxConfiguration.CrawljaxConfigurationBuilder

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.