Logging HTML requests in robot framework Logging HTML requests in robot framework selenium selenium

Logging HTML requests in robot framework


Selenium is only emulating user behaviour, so it does not help you here. You could use a proxy that logs all the traffic and lets you examine the traffic. BrowserMob Proxy let's you do that. See Create Webdriver from Selenium2Libray on how to configure proxy for your browser.

This way you can ask your proxy to return the traffic after you noticed a failure in you test.


I have implemented same thing using BrowserMobProxy. It captures network traffic based on the test requirement.

First function CaptureNetworkTraffic(), will open the browser with configuration provided in the parameters.

Second function Parse_Request_Response(), will get the HAR file from above function and return resp. network data based on the parameter configured.

e.g.

print Capture_Request_Response("g:\\har.txt","google.com",True,True,False,False,False)

In this case, it will check url with "google.com" and returns response and request headers for the url.

    from browsermobproxy import Server    from selenium import webdriver    import json    def CaptureNetworkTraffic(url,server_ip,headers,file_path):    '''     This function can be used to capture network traffic from the browser.                       Using this function we can capture header/cookies/http calls made from the      browserurl - Page url    server_ip - remap host to for specific URL    headers - this is a dictionary of the headers to be set    file_path - File in which HAR gets stored    '''    port = {'port':9090}    server = Server("G:\\browsermob\\bin\\browsermob-proxy",port) #Path to      the BrowserMobProxy    server.start()    proxy = server.create_proxy()    proxy.remap_hosts("www.example.com",server_ip)    proxy.remap_hosts("www.example1.com",server_ip)    proxy.remap_hosts("www.example2.com",server_ip)    proxy.headers(headers)    profile  = webdriver.FirefoxProfile()    profile.set_proxy(proxy.selenium_proxy())    driver = webdriver.Firefox(firefox_profile=profile)    new = {'captureHeaders':'True','captureContent':'True'}    proxy.new_har("google",new)    driver.get(url)    proxy.har # returns a HAR JSON blob    server.stop()    driver.quit()    file1 = open(file_path,'w')    json.dump(proxy.har,file1)    file1.close()def Parse_Request_Response(filename,url,response=False,request_header=False,request_cookies=False,response_header=False,response_cookies=False):resp ={}har_data = open(filename, 'rb').read()har = json.loads(har_data)for i in har['log']['entries']:    if url in i['request']['url']:        resp['request'] = i['request']['url']        if response:            resp['response'] = i['response']['content']        if request_header:            resp['request_header'] = i['request']['headers']        if request_cookies:            resp['request_cookies'] = i['request']['cookies']        if response_header:            resp['response_header'] = i['response']['headers']        if response_cookies:            resp['response_cookies'] = i['response']['cookies']return resp  if (__name__=="__main__"):  headers = {"User-Agent":"Mozilla/5.0 (iPad; CPU OS 5_0 like Mac OS X)  AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9A334 Safari/7534.48.3"}    CaptureNetworkTraffic("http://www.google.com","192.168.1.1",headers,"g:\\har.txt")    print Parse_Request_Response("g:\\har.txt","google.com",False,True,False,False,False)