diff --git a/common/lib/xmodule/xmodule/tests/test_video.py b/common/lib/xmodule/xmodule/tests/test_video.py
index e66058b18cdc30d8239c2ead276c6e80e734af6c..99b95b6fa88ec09d3b399c51d78f62d0c903855b 100644
--- a/common/lib/xmodule/xmodule/tests/test_video.py
+++ b/common/lib/xmodule/xmodule/tests/test_video.py
@@ -220,7 +220,23 @@ class VideoBlockTestBase(unittest.TestCase):
             return [child.tag for child in elem]
 
         for attr in ['tag', 'attrib', 'text', 'tail']:
-            self.assertEqual(getattr(expected, attr), getattr(xml, attr))
+            expected_attr = getattr(expected, attr)
+            actual_attr = getattr(xml, attr)
+
+            # This is to deal with a special issue in the video descriptor xml output.
+            # The value of the transcript attribute of the video tag is a serialized
+            # json string.  This can have comparison problems in python3 where the order
+            # of the dictionary output is not gauranteed to be the same. So the strings
+            # don't match equally.  We convert the parsed json instead so that the
+            # comparison can be correct.
+            if isinstance(expected_attr, dict) and \
+                    isinstance(actual_attr, dict) and \
+                    'transcripts' in expected_attr and \
+                    'transcripts' in actual_attr:
+                expected_attr['transcripts'] = json.loads(expected_attr['transcripts'])
+                actual_attr['transcripts'] = json.loads(actual_attr['transcripts'])
+
+            self.assertEqual(expected_attr, actual_attr)
         self.assertEqual(get_child_tags(expected), get_child_tags(xml))
         for left, right in zip(expected, xml):
             self.assertXmlEqual(left, right)