在Robot Framework / Selenium中使用BrowserMobProxy将URL列入黑名单?

时间:2018-10-08 10:00:26

标签: robotframework browsermob-proxy browsermob

我正在使用带有Selenium库的RobotFramework为各种网站编写自动测试用例。我遇到了一个问题,由于从第三方URL加载速度慢,某些页面需要永久加载,因此我想阻止它们以加快测试执行速度。

但是,我仍然坚持通过Robot Framework中的BrowserMob实施该解决方案。有人可以帮忙吗?

到目前为止,我有以下代码:

Start Browser
    ## Init BrowserMob Proxy
    ${BMPATH}    Join Path    ${EXECDIR}    browsermob-proxy-2.1.4    bin    browsermob-proxy.bat
    &{bmphost}    Create Dictionary    address=127.0.0.1    port=7070
    Start Local Server    ${BMPATH}
    # Create dedicated proxy on BrowserMob Proxy
    &{host}    Create Dictionary    address=127.0.0.1    port=7070
    ${BrowserMob_Proxy}=    Create Proxy    ${host}
    #Blacklist URLS
    Blacklist    https://.*\\.google.com/.*    404
    ## Configure Webdriver to use BrowserMob Proxy
    ${options}=    Evaluate    sys.modules['selenium.webdriver'].ChromeOptions()    sys, selenium.webdriver
    Call Method    ${options}    add_argument    --proxy\=127.0.0.1:7070
    #${proxy1}=    Evaluate    sys.modules['selenium.webdriver'].Proxy()    sys, selenium.webdriver
    #${proxy1.http_proxy}=    Set Variable    localhost:8888
    Create WebDriver    Chrome    chrome_options=${options}    #proxy=${BrowserMob_Proxy}
    Go to    https://www.google.com

目标是翻译此selenium / java代码:

private WebDriver initializeDriver() throws Exception {
    // Start the server and get the selenium proxy object
    ProxyServer server = new ProxyServer(proxy_port);  // package net.lightbody.bmp.proxy

    server.start();
    server.setCaptureHeaders(true);
    // Blacklist google analytics
    server.blacklistRequests("https?://.*\\.google-analytics\\.com/.*", 410);
    // Or whitelist what you need
    server.whitelistRequests("https?://*.*.yoursite.com/.*. https://*.*.someOtherYourSite.*".split(","), 200);

    Proxy proxy = server.seleniumProxy(); // Proxy is package org.openqa.selenium.Proxy

    // configure it as a desired capability
    DesiredCapabilities capabilities = new DesiredCapabilities();
    capabilities.setCapability(CapabilityType.PROXY, proxy);

    // start the driver   ;
    Webdriver driver = new FirefoxDriver(capabilities);

    return driver;

我现在拥有的代码可创建服务器,代理并打开chrome浏览器,但无法将google.com列入黑名单,反正也无法打开页面。尝试了多个regexp表达式,但都失败了,但是我认为该错误是在此之前的某个地方发生的,无论是通过创建代理/服务器的方式还是将黑名单URL的方式都是错误的。

有人在RF上成功实施此解决方案吗?有人可以告诉我我所缺少的吗?

谢谢

1 个答案:

答案 0 :(得分:1)

对于可能需要此服务的任何人,解决方案如下:

Start Browser
    [Documentation]    Start browser
    Set Selenium Implicit Wait    10
    ${BMPATH}    Join Path    ${EXECDIR}    browsermob-proxy-2.1.4    bin    browsermob-proxy.bat
    Start Local Server    ${BMPATH}
    ## Create dedicated proxy on BrowserMob Proxy
    &{host}    Create Dictionary    port=7070  
    ${BrowserMob_Proxy}=    Create Proxy    ${host}
    Blacklist    .*\/\/.*google.*    200
    ## Configure Webdriver to use BrowserMob Proxy
    ${options}=    Evaluate    sys.modules['selenium.webdriver'].ChromeOptions()    sys, selenium.webdriver
    Call Method    ${options}    add_argument    --start-maximized
    Call Method    ${options}    add_argument    --proxy-server\=localhost:7070
    Create WebDriver    Chrome    chrome_options=${options}

这将最大程度地启动chrome浏览器,并通过BMP路由流量。 黑名单行中的正则表达式表示它将阻止所有包含“ google”的URL并返回状态200(可以随意更改)。