启动硒的问题

时间:2011-01-11 08:38:54

标签: java selenium

我在开始服用硒时遇到了问题。实际上我的线程类在run()方法中有selenium.start()。所以,当我使用下面的代码行时,

//some another class
class someclass{

    ScrapeThread nidleThread = new ScrapeThread("nidleThread");    
    Thread scraper = new Thread(niidleThread);
    scraper.start()
}

因为thread.start()方法在内部调用了run()方法,所以在线程类的run()方法中,只有前两行三行代码被执行,当它执行时会进入selenium.start()并执行,然后selenium在启动时给出问题我只能看到两个命令在selenium远程命令历史中执行,然后被击中。

但是当我使用下面的代码并直接调用我的线程类的run()方法

//some another class
class someclass{
    ScrapeThread nidleThread = new ScrapeThread("nidleThread");    
    nidleThread.run();
}

这里它正常工作,我正在按需要获得正确的输出。

当我以正常方式执行线程时,即通过调用scrapper.start()方法启动selenium会出现什么问题?

//in thread class
run(){   
    selenium = new DefaultSelenium(config.getHost(), Integer.parseInt(config.getPort()),          config.getBrowser(), config.getUrl());            
    selenium.start();                                                        
}         

线程类

的run()方法中的代码

public void run(){

    try {

        System.out.println("in the run method");

        scraper = siteToScrape.getSiteScraper();

        scraper.setStartPageType(pageTypeToScrape);

        scraper.setPageTypeToScrape(typeToScrape);

        SocialParser parser = siteToScrape.getSiteParser();
        selenium = new DefaultSelenium(config.getHost(), Integer.parseInt(config.getPort()), config.getBrowser(), config.getUrl());
        selenium.start();
        System.out.println("EXECUTED 1!!");//after this nothing is getting                
                                                       //executed
        Integer count = 0;
        System.out.println("EXECUTED 2!!");
        while (startUrl != null) {
        System.out.println("EXECUTED 3!!");
            HtmlPage homePage = new HtmlPage();
            homePage.setCreatedBy(new String());
            homePage.setCreatedon(new String());
            homePage.setModifiedBy(new String());
            homePage.setModifiedOn(new String());
            homePage.setNoOfItemsFound(new String());
            homePage.setOwnedBy(urlOwnedBy);
            homePage.setPageType(scraper.getPageTypeToScrape());
            homePage.setPageUrl(startUrl);
            element  = getInitialisedElement();
            scraper.setNavigator(element.getNavigator());
            scraper.setStartUrl(startUrl);
            try {
                scraper.initialize();//some more stuff
            }catch (Exception e) {
        e.printStackTrace();
    }

1 个答案:

答案 0 :(得分:1)

好吧,我假设你要做的是创建一个线程来使用selenium来执行一些页面抓取来驱动浏览器?如果是这样,我会确保你的selenium服务器配置是正确的,然后我还要确保selenium.start()不会与试图调用任何selenium命令的任何东西同时调用。

根据我的经验,在处理多个线程时你应该非常小心,好像我要做这样的事情:


Thread threadOne = new Thread(something);
Thread threadTwo = new Thread(somethingElse);

threadOne.start(); threadTwo.start();

这并不一定意味着threadOne将在threadTwo之前或与threadTwo完全同时启动。