【问题标题】:Problem in starting selenium启动硒的问题
【发布时间】:2011-01-11 08:38:54
【问题描述】:

我在启动 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 remote 的命令历史记录中执行了两个命令,然后在那里被击中。

但是当我使用下面的代码并直接调用我的线程类的 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()方法中的代码

公共无效运行(){

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

【问题讨论】:

  • 您能否提供 selenium 服务器给您的任何错误消息?
  • 能否请您提供 Selenium 错误消息,以及启动 Selenium 的部分代码?另外,请更正代码格式(选择您的代码并按文本区域上方控制面板上的“{}”按钮)
  • @jerluc 我没有收到任何错误消息或异常。在 selenium 遥控器的命令历史记录框中,前两个命令被执行,然后它被击中。
  • 对不起,我想我误解了你原来的问题。那么在 selenium 实例启动后,您尝试从 RC 执行哪些命令?
  • @jerluc 我正在尝试打开一些站点。for ex open("google.com")

标签: java selenium


【解决方案1】:

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

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


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

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

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

【讨论】:

  • 但问题是,当我直接调用 run() 方法时,它使用相同的 selenium 配置工作正常。
  • 这就是我的意思,当你直接调用 run() 时,你实际上只是在调用方法本身,而当你调用 start() 时,你的线程正在被池化,并将在某个时间执行不久的将来。
猜你喜欢
  • 2021-05-14
  • 2016-06-09
  • 2017-12-08
  • 2012-04-12
  • 2018-10-22
  • 1970-01-01
  • 2016-10-26
  • 2017-02-26
相关资源
最近更新 更多