Selenium自定义配置的策略

1. 希望能对WebDriver的超时(HttpClient)自定义配置

关键的类:  HttpCommandExecutor、HttpClientFactory
顾名思义,HttpClientFactory可以生成HttpClient用于处理HTTP请求,而从源码中可以看到其中的SoTimeout并不合理
HttpClientFactory : 

 private final int TIMEOUT_THREE_HOURS = (int) SECONDS.toMillis( 60 * 60 * 3);

  public HttpParams getHttpParams() {
    HttpParams params = new BasicHttpParams();
    HttpConnectionParams.setSoReuseaddr(params, true);
    HttpConnectionParams.setConnectionTimeout(params, 120 * 1000);
    HttpConnectionParams.setSoTimeout(params, TIMEOUT_THREE_HOURS);
    params.setIntParameter(ConnConnectionPNames.MAX_STATUS_LINE_GARBAGE, 0);
    HttpConnectionParams.setStaleCheckingEnabled(params, true);
    return params;
  }
其默认的socket read超时居然是丧心病狂的三个小时
这也就导致我们在执行WebDriver的操作的时候时不时会有线程一直阻塞直到三小时后RemoteWebDriver抛出异常:
UnreachableBrowserException : Forwarding XXX(表示发送给WebDriver的命令) on session SessioinID to remote
这种情况可能发生在get()、findElement()等方法
 
 
优化思路 : 
1. 使用适配器模式自定义自己的HttpClient生成方式
2. 照搬这些类的源码并添加自己的自定义逻辑
 
 

2.希望可以自定义日志文件的路径

关键的类 : PhantomJSDriverService
其中的创建逻辑如下:
public static PhantomJSDriverService createDefaultService(Capabilities desiredCapabilities) {
        // Look for Proxy configuration within the Capabilities
        Proxy proxy = null;
        if (desiredCapabilities != null) {
            proxy = Proxies.extractProxy(desiredCapabilities);
        }

        // Find PhantomJS executable
        File phantomjsfile = findPhantomJS(desiredCapabilities, PHANTOMJS_DOC_LINK, PHANTOMJS_DOWNLOAD_LINK);

        // Find GhostDriver main JavaScript file
        File ghostDriverfile = findGhostDriver(desiredCapabilities, GHOSTDRIVER_DOC_LINK, GHOSTDRIVER_DOWNLOAD_LINK);

        // Build & return service
        return new Builder().usingPhantomJSExecutable(phantomjsfile)
                .usingGhostDriver(ghostDriverfile)
                .usingAnyFreePort()
                .withProxy(proxy)
                .withLogFile(new File(PHANTOMJS_DEFAULT_LOGFILE))
                .usingCommandLineArguments(
                        findCLIArgumentsFromCaps(desiredCapabilities, PHANTOMJS_CLI_ARGS))
                .usingGhostDriverCommandLineArguments(
                        findCLIArgumentsFromCaps(desiredCapabilities, PHANTOMJS_GHOSTDRIVER_CLI_ARGS))
                .build();
    }
可见日志路径已经被withLogFile()硬编码了,其自定义策略同上
或者对GhostDriver熟悉的可以直接通过GhostDriver来进行更深层的自定义
 
 
 
 
 
 
感想:希望selenium对于一些配置项能够提供优雅地修改的方式

 
  
 
 
 
 
 
 
 
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值