Capturing screenshot of error page when configuration fails for AP.

BUG=None
TEST=manual

Change-Id: I73979636ff866d9b5b191e1c4f880d72a67eb8d8
Reviewed-on: https://gerrit.chromium.org/gerrit/63759
Reviewed-by: Kris Rambish <krisr@chromium.org>
Commit-Queue: Viral Modi <viralmodi@chromium.org>
Tested-by: Viral Modi <viralmodi@chromium.org>
diff --git a/server/cros/chaos_ap_configurators/ap_cartridge.py b/server/cros/chaos_ap_configurators/ap_cartridge.py
index 48b6cf8..220a292 100644
--- a/server/cros/chaos_ap_configurators/ap_cartridge.py
+++ b/server/cros/chaos_ap_configurators/ap_cartridge.py
@@ -44,6 +44,7 @@
                 logging.error('Configuration failed for AP: %s\n%s',
                               configurator.get_router_name(),
                               ''.join(traceback.format_exc()))
+                configurator.screenshot_list
                 configurator.reset_command_list()
             logging.info('Configuration of AP %s complete.',
                          configurator.get_router_name())
diff --git a/server/cros/chaos_ap_configurators/ap_configurator.py b/server/cros/chaos_ap_configurators/ap_configurator.py
index 21fa5ea..0ee44b6 100644
--- a/server/cros/chaos_ap_configurators/ap_configurator.py
+++ b/server/cros/chaos_ap_configurators/ap_configurator.py
@@ -74,6 +74,7 @@
         self.wep_authentication_shared = config.WEP_AUTHENTICATION_SHARED
 
         self._command_list = []
+        self._screenshot_list = []
 
         self.driver_connection_established = False
         self.router_on = False
@@ -110,6 +111,17 @@
         self.destroy_driver_connection()
 
 
+    @property
+    def screenshot_list(self):
+        """Returns the file as a base 64 encoded string for screenshot."""
+        if self.driver_connection_established:
+            screenshot = self.driver.get_screenshot_as_base64()
+            if screenshot:
+                self._screenshot_list.append(screenshot)
+        return self._screenshot_list
+        self._screenshot_list = []
+
+
     def get_router_name(self):
         """Returns a string to describe the router."""
         return ('Router name: %s, Controller class: %s, MAC '
diff --git a/server/cros/chaos_lib/chaos_base_test.py b/server/cros/chaos_lib/chaos_base_test.py
index 9f086e5..0cf2e28 100644
--- a/server/cros/chaos_lib/chaos_base_test.py
+++ b/server/cros/chaos_lib/chaos_base_test.py
@@ -149,6 +149,14 @@
                 {'error': self.FAILED_CONFIG_MSG,
                  'try': 0})
             self.error_list.append(ap_info)
+            # Capture screenshot when configuration fails
+            for image in ap_info['configurator'].screenshot_list:
+                error = os.path.join(log_dir,
+                        'config_error_screenshot_%d.png' %
+                        ap_info['configurator'].screenshot_list.index(image))
+                f = open(error, 'wb')
+                f.write(image.decode('base64'))
+                f.close()
             return
 
         # Make iteration 1-indexed