gpt4 book ai didi

java - 有没有办法使用 BrowserStack 和 Selenium 捕获网络?

转载 作者:行者123 更新时间:2023-11-29 08:34:35 24 4
gpt4 key购买 nike

我使用 BrowserStack使用 Selenium-webdriver 在不同类型的设备和浏览器上运行测试。所以实际上测试是由 RemoteWebDriver 运行的。我知道可以使用 BrowserMobProxy 在 Selenium 测试中捕获网络,但据我所知,只有当测试在本地机器上运行时它才有效。
有没有办法在像 BrowserStack 这样的跨平台基础上运行测试时捕获网络?

更新
按照我的建议,我使用独立的 BrowserMobProxy 和独立的本地 BrowserStack 设法在 har 文件中捕获了网络(来自链接“localhost:8080/proxy/8081/har”)。

我试图通过代码自动执行相同的操作:

    BrowserMobProxy proxy = new BrowserMobProxyServer();
proxy.start(8080);
System.out.println("Proxy port: " + port);
System.setProperty("java.net.useSystemProxies", "true");
System.setProperty("http.proxyHost", "127.0.0.1");
System.setProperty("http.proxyPort", "8080");
System.setProperty("https.proxyHost", "127.0.0.1");
System.setProperty("https.proxyPort", "8080");

Local l = new Local();
Map<String, String> options = new HashMap<String, String>();
options.put("key", accessKey);
options.put("forcelocal", "true");`

//when I uncomment it i get an exception:
//com.browserstack.local.LocalException: Could not connect to www.browserstack.com!

// options.put("forceproxy", "true");
// options.put("proxyHost", "localhost");
// options.put("proxyPort", "8080");
l.start(options);
}
Proxy seleniumProxy = ClientUtil.createSeleniumProxy(proxy);
capabilities.setCapability(CapabilityType.PROXY, seleniumProxy);
proxy.enableHarCaptureTypes(CaptureType.REQUEST_CONTENT, CaptureType.RESPONSE_CONTENT);
driver = new RemoteWebDriver(new URL("http://"+username+":"+accessKey+"@"+config.get("server")+"/wd/hub"), capabilities);'

proxy.newHar("testHar.com");

driver.get(testUrl);
Thread.sleep(15000);
Har har = proxy.getHar();
FileOutputStream fos = new FileOutputStream("C:\\LoadingPage\\network\\testHar.har");
har.writeTo(fos);

与 url 的连接正常,我可以看到它并制作屏幕截图。但!在 har 文件中,我只看到对“hub-cloud.browserstack.com/wd/hub/...”的请求,而不是来自页面本身的请求。

如何从代码中得到正确的har?代码哪里不对?

最佳答案

根据我的经验,我想对 BrowserStack 链接(由 Mikhail 共享)中给出的二进制命令添加小的修改。文档中给出的 cmd 应该适用于私有(private) URL,但可能不适用于公共(public) URL。


  • 独立二进制文件的步骤:

1 - 从“https://www.browserstack.com/local-testing#command-line”下载 BrowserStackLocal 二进制文件'.

通过运行以下命令启动二进制文件,使您的代理能够监控流量。

- BrowserStackLocal.exe --key --local-proxy-host --local-proxy-port --local-proxy-user --local-proxy-pass --force-proxy --force-local/p>

有关所有修饰符的更多详细信息,请访问“https://www.browserstack.com/local-testing#modifiers” '.

2 - 在您的测试脚本中包含“browserstack.local”功能。

"browserstack.local"= true



  • Java(BrowserStack Local)绑定(bind)的步骤:

1 - 关注 these steps用于使用本地绑定(bind)。

2 - 使用 this您可以使用最新版本的二进制文件中可用的更新选项。例如,如果你想添加 --local-proxy-* 选项,没有现有的包装器(如 this 内部映射到 this ),请尝试使用以下:

bsLocalArgs.put("-local-proxy-host", "Your BrowserMob proxy IP");

bsLocalArgs.put("-local-proxy-port", "Your BrowserMob proxy Port");

bsLocalArgs.put("-local-proxy-user", "Your BrowserMob proxy Username");

bsLocalArgs.put("-local-proxy-pass", "Your BrowserMob proxy Password");

3 - 在您的测试脚本中包含“browserstack.local”功能。

"browserstack.local"= true


工作原理:默认情况下,BrowserStack 将解析其网络中的所有公共(public) URL。

使用 --force-local 选项将强制二进制文件解析通过您的网络而不是来自 BrowserStack 网络的所有流量(甚至是公共(public) URL)。

添加 --local-proxy-* 选项将使二进制文件知道流量也需要通过您的本地代理进行路由。

现在您的本地 BrowserMob 可以捕获 HAR 中的所有流量。

关于java - 有没有办法使用 BrowserStack 和 Selenium 捕获网络?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45194623/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com