Я написал расширение для Arquillian-Drone, которое должно записывать HTTP-запросы теста и создавать HAR-файл для каждого метода.Файлы HAR создаются (в большинстве случаев ... в настоящий момент они немного нестабильны), но они не содержат URL-адресов HTTP-запросов
Я нашел еще один вопрос здесьstackoverflow, описывающий тот же результат, но ответ в моем случае не дал решения.
(Ticket: BrowserMob Proxy + Selenium: не получено ни одного ответа HTTP )
Instantiator :
@Override
public FirefoxDriver createInstance(WebDriverConfiguration arg0) {
server.setTrustAllServers(true);
server.setHarCaptureTypes(CaptureType.REQUEST_CONTENT, CaptureType.RESPONSE_CONTENT);
server.start();
System.err.println("BrowserMob Proxy running on port: " + server.getPort());
seleniumProxy = ClientUtil.createSeleniumProxy(server);
try {
hostIp = Inet4Address.getLocalHost().getHostAddress();
seleniumProxy.setHttpProxy(hostIp + ":" + server.getPort());
seleniumProxy.setSslProxy(hostIp + ":" + server.getPort());
} catch (UnknownHostException e1) {
e1.printStackTrace();
System.err.println("invalid Host Address");
}
options.setCapability(CapabilityType.PROXY, seleniumProxy);
options.setAcceptInsecureCerts(true);
geckoService = new GeckoDriverService.Builder()
.usingDriverExecutable(new File("C:/Program Files/GeckoDriver/geckodriver.exe")).usingAnyFreePort()
.build();
try {
geckoService.start();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return new FirefoxDriver(geckoService, options);
}
Наблюдатели :
public void prepareHAR(@Observes EventContext<Test> context) throws IOException {
harFileName = "arquilliantest" + System.currentTimeMillis() + context.getEvent().getTestMethod().getName();
server.newHar(harFileName);
if (server.getHar() != null) {
System.err.print(harFileName + " is prepared");
} else {
throw new RuntimeException("HAR was not created!");
}
context.proceed();
}
public void writeHAR(@Observes EventContext<After> context) throws IOException {
Har har = server.getHar();
String pfad = System.getProperty("user.dir") + File.separator + harFileName + ".har";
if (!server.getHar().getLog().getEntries().isEmpty()) {
File harFile = new File(pfad);
har.writeTo(harFile);
System.err.print(pfad + " is saved");
List<HarEntry> entries = har.getLog().getEntries();
for (HarEntry entry : entries) {
System.err.println("Request URL: " + entry.getRequest().getUrl());
System.err.println("Entry response status: " + entry.getResponse().getStatus());
System.err.println("Entry response text: " + entry.getResponse().getStatusText());
}
} else {
throw new RuntimeException("HAR is empty!");
}
// server.newHar(harFileName);
context.proceed();
}
public void closeServer(@Observes EventContext<AfterClass> context) throws IOException {
server.endHar();
server.stop();
geckoService.stop();
context.proceed();
}
Снято с моего HAR:
{"log": {"version": "1.2", "creator": {"name": "Прокси BrowserMob", "version": "2.1.5", "comment": ""},
"pages": [{"id": " arquilliantest1561033479096minimaltestAnlegenKrankheit ", "startDateTime": "2019-06-20T12: 24: 39.316Z", "title": " arquilliantest15610334790itk минимальный тест 10 минимальный тест* "," pageTimings ": {" comment ":" "}," comment ":" "}],
" records ": [{" pageref ":" arquilliantest1561033479096minimaltestAnlegenKrankheit "," startDateTime ":" 2019-06-20T12: 24: 40.032Z ",
" request ": {" method ":" POST "," url ":" https://shavar.services.mozilla.com/downloads?client=navclient-auto- ffox & appver = 67.0 & pver= 2.2 "," httpVersion ":" HTTP / 1.1 "," cookies ": []," headers ": [],
, поэтому кажется, что URL-адреса каким-то образом заменены на HAR-имя (как в другом билете)
Я уже использую BrowserMob, как это было предложено в другом билете:
группа компиляции: 'net.lightbody.bmp', name: 'browsermob-core ', версия:' 2.1.5 '
любые идеи будут высоко оценены!
edit: я использую следующие версии :
- Ядро Browsermob: 2.1.5
- Arquillian: 1.4.1-Final
- Drone: 2.5.1
- Селен: 3.14.0
- Firefox 67.0
- GeckoDriver: 0.24.0
edit
Мне кажется, я знаю корень проблемы:отслеживание защиты Firefox.Я попытался реализовать профиль Firefox, для которого для параметра «Предпочтение для отслеживания» установлено значение «false», но изменения не отображаются в моем браузере.Есть ли что-то, что необходимо учитывать при изменении предпочтений?