【问题标题】:URL blacklisting with BrowserMobProxy in Robot Framework/Selenium?在 Robot Framework/Selenium 中使用 BrowserMobProxy 将 URL 列入黑名单?
【发布时间】:2019-03-12 23:31:09
【问题描述】:

我正在使用带有 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 列入黑名单并打开页面。尝试了多个正则表达式,都失败了,但我认为错误是在那之前的某个地方出现的,无论是在创建代理/服务器的方式上还是将 URL 列入黑名单的方式都不正确。

有没有人成功地在 RF 中实施此解决方案?有人可以告诉我我错过了什么吗?

谢谢

【问题讨论】:

  • 您是否尝试过手动设置浏览器以指向 BrowserMob 以查看规则是否适用于该场景?
  • 抱歉@A.Kootstra 的延迟回答,但优先级发生了变化,直到现在才被遗忘。我设法通过您的建议解决了问题,代理设置不起作用。谢谢!将为可能需要此代码的任何人上传正确的代码

标签: robotframework browsermob-proxy browsermob


【解决方案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(可以随意更改)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-22
    • 1970-01-01
    • 2016-09-17
    • 2012-10-06
    • 1970-01-01
    相关资源
    最近更新 更多