diff --git a/Tools/ChangeLog b/Tools/ChangeLog
index 9d80603..438ad22 100644
--- a/Tools/ChangeLog
+++ b/Tools/ChangeLog
@@ -1,3 +1,50 @@
+2019-08-28  Jonathan Bedard  <jbedard@apple.com>
+
+        results.webkit.org: Move drawer to the right, open by default
+        https://bugs.webkit.org/show_bug.cgi?id=200977
+
+        Rubber-stamped by Aakash Jain.
+
+        The drawer was both unpopular and not discoverable. After feedback from bot watchers,
+        moving the drawer to the right side of the screen, opening it by default and have it displace
+        instead of hide the main content.
+
+        * resultsdbpy/resultsdbpy/view/commit_view_unittest.py:
+        (CommitViewUnittest.test_drawer): Support new drawer style.
+        (CommitViewUnittest.test_range_slider): Ditto.
+        (CommitViewUnittest.test_one_line_switch): Ditto.
+        (CommitViewUnittest.test_branch_selection): Ditto.
+        * resultsdbpy/resultsdbpy/view/static/css/drawer.css: Removed.
+        * resultsdbpy/resultsdbpy/view/static/js/drawer.js:
+        (setEnableRecursive): Disable all elements underneath this one 
+        (Drawer): Make drawer a sidebar.
+        * resultsdbpy/resultsdbpy/view/static/library/css/webkit.css:
+        (.header>.title, .topbar>.title): Overflow of titles should be hidden.
+        (:root): Move boldInverseColor into webkit.css.
+        (@media (prefers-color-scheme: dark)):
+        (.sidebar): Sidebars on mobile should behave like drawers.
+        (.sidebar.hidden): Add concept of hidden sidebar.
+        (.mobile-sidebar-control): Add a control to collapse sidebar that only exists on mobile.
+        (.mobile-sidebar-control.display):
+        (.main.under-topbar-with-actions):
+        (@media screen and (min-width: 600px) and (orientation: landscape)):
+        (.sidebar.left.hidden):
+        (.sidebar.right.hidden):
+        (.main.right.hidden):
+        (.main.left.hidden):
+        (@media screen and (min-width: 768px) and (orientation: landscape)):
+        (.sidebar.right):
+        (a.disabled): Add ability to disable a link.
+        (.desktop-control): Add a control which only exists on desktop.
+        * resultsdbpy/resultsdbpy/view/templates/base.html: Add hamburger drawer-button for mobile.
+        * resultsdbpy/resultsdbpy/view/templates/commits.html: Use main since Drawer is now a sidebar.
+        * resultsdbpy/resultsdbpy/view/templates/documentation.html: Ditto.
+        * resultsdbpy/resultsdbpy/view/templates/search.html: Ditto.
+        * resultsdbpy/resultsdbpy/view/templates/suite_results.html: Ditto.
+        * resultsdbpy/resultsdbpy/view/view_routes_unittest.py:
+        (WebSiteTestCase.toggle_drawer): Support new drawer style.
+        (WebSiteTestCase.find_input_with_name): Ditto.
+
 2019-08-28  Keith Rollin  <krollin@apple.com>
 
         Remove support for macOS < 10.13 (part 2)
diff --git a/Tools/resultsdbpy/resultsdbpy/view/commit_view_unittest.py b/Tools/resultsdbpy/resultsdbpy/view/commit_view_unittest.py
index 7ce3e49..5a1a0f0 100644
--- a/Tools/resultsdbpy/resultsdbpy/view/commit_view_unittest.py
+++ b/Tools/resultsdbpy/resultsdbpy/view/commit_view_unittest.py
@@ -64,10 +64,10 @@
     def test_drawer(self, driver, **kwargs):
         driver.get(self.URL + '/commits')
         time.sleep(.2)
-        self.assertNotIn('display', driver.find_element_by_class_name('drawer').get_attribute('class'))
+        self.assertNotIn('hidden', driver.find_element_by_class_name('sidebar').get_attribute('class'))
 
-        self.toggle_drawer(driver, assert_displayed=True)
         self.toggle_drawer(driver, assert_displayed=False)
+        self.toggle_drawer(driver, assert_displayed=True)
 
     @WaitForDockerTestCase.mock_if_no_docker(mock_redis=FakeStrictRedis, mock_cassandra=MockCassandraContext)
     @WebSiteTestCase.decorator()
@@ -158,8 +158,6 @@
         self.assertEqual(5, len(commits['safari']))
         self.assertEqual(5, len(commits['webkit']))
 
-        self.toggle_drawer(driver, assert_displayed=True)
-
         controls = self.find_input_with_name(driver, 'Limit:').find_elements_by_tag_name('input')
         self.assertEqual(3, len(controls))
         input = [control for control in controls if control.get_attribute('type') == 'number'][0]
@@ -199,8 +197,6 @@
         changelog = commits['safari'][0].find_element_by_tag_name('div')
         self.assertEqual(line_1, changelog.text)
 
-        self.toggle_drawer(driver, assert_displayed=True)
-
         controls = self.find_input_with_name(driver, 'One-line:').find_elements_by_tag_name('span')
         self.assertEqual(1, len(controls))
         input = [control for control in controls if control.get_attribute('class') == 'slider'][0]
@@ -235,8 +231,6 @@
         self.assertEqual(5, len(commits['safari']))
         self.assertEqual(5, len(commits['webkit']))
 
-        self.toggle_drawer(driver, assert_displayed=True)
-
         controls = self.find_input_with_name(driver, 'Branch').find_elements_by_tag_name('select')
         self.assertEqual(1, len(controls))
         Select(controls[0]).select_by_visible_text('safari-606-branch')
diff --git a/Tools/resultsdbpy/resultsdbpy/view/static/css/drawer.css b/Tools/resultsdbpy/resultsdbpy/view/static/css/drawer.css
deleted file mode 100644
index 1324f98..0000000
--- a/Tools/resultsdbpy/resultsdbpy/view/static/css/drawer.css
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * Copyright (C) 2019 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. "AS IS" AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-:root {
-    --boldInverseColor: var(--black);
-}
-
-@media (prefers-color-scheme: dark) {
-    :root {
-        --boldInverseColor: var(--white);
-    }
-}
-
-.drawer.left.display {
-    width: 300px;
-}
-
-.drawer-control {
-    left: 0;
-    top: 50%;
-    height: 80px;
-    width: 15px;
-    cursor: pointer;
-    -webkit-backdrop-filter: blur(5px) brightness(88%);
-    backdrop-filter: blur(5px) brightness(88%);
-    position: fixed;
-    transition: 0.5s;
-    border: none;
-    z-index: calc(var(--topZIndex) + 1);
-}
-
-.drawer-control:hover {
-    background-color: rgba(157, 204, 254, 0.74902);
-}
-
-.collapsed {
-    left: 0;
-    background-color: var(--blurBackgroundColorGrey);
-    box-shadow: 0px 0px 5px 1px var(--grey);
-}
-
-.collapsed>div {
-  width: 0; 
-  height: 0;
-  position: absolute;
-  top: 32px;
-  left: 2px;
-  border-top: 10px solid transparent;
-  border-bottom: 10px solid transparent;
-  border-left: 10px solid black;
-}
-
-.extended {
-    left: 285px;
-    background-color: var(--blurBackgroundColor);
-}
-
-.extended>div {
-  width: 0; 
-  height: 0;
-  position: absolute;
-  top: 32px;
-  left: 2px;
-  border-bottom: 10px solid transparent;
-  border-right:10px solid black;
-  border-top: 10px solid transparent;
-}
diff --git a/Tools/resultsdbpy/resultsdbpy/view/static/js/drawer.js b/Tools/resultsdbpy/resultsdbpy/view/static/js/drawer.js
index 2388b07..9de241e 100644
--- a/Tools/resultsdbpy/resultsdbpy/view/static/js/drawer.js
+++ b/Tools/resultsdbpy/resultsdbpy/view/static/js/drawer.js
@@ -25,29 +25,68 @@
 import {QueryModifier} from '/assets/js/common.js';
 import {Configuration} from '/assets/js/configuration.js'
 
+function setEnableRecursive(element, state) {
+    element.disabled = !state;
+    if (!state)
+        element.classList.add("disabled");
+    else
+        element.classList.remove("disabled");
+
+    for (let node of element.children)
+        setEnableRecursive(node, state);
+}
+
 function Drawer(controls = []) {
-    const COLLAPSED = false;
-    const EXTENDED = true;
-    var drawerState = COLLAPSED;
+    const HIDDEN = false;
+    const VISIBLE = true;
+    let drawerState = VISIBLE;
+    let main = null;
+
+    const sidebarControl = document.getElementsByClassName('mobile-sidebar-control')[0];
+    sidebarControl.classList.add('display');
 
     const drawerRef = REF.createRef({
         state: drawerState,
         onStateUpdate: (element, state) => {
-            if (state)
-                element.classList.add("display");
-            else
-                element.classList.remove("display");
+            if (state) {
+                element.classList.remove("hidden");
+                if (main)
+                    main.classList.remove("hidden");
+            } else {
+                element.classList.add("hidden");
+                if (main)
+                    main.classList.add("hidden");
+            }
+
+            for (let node of element.children) {
+                if (node.classList.contains("list"))
+                    setEnableRecursive(node, state);
+            }
+        },
+        onElementMount: (element) => {
+            let candidates = document.getElementsByClassName("main");
+            if (candidates.length)
+                main = candidates[0];
+
+            sidebarControl.onclick = () => {
+                if (element.style.display)
+                    element.style.display = null;
+                else
+                    element.style.display = 'block';
+            }
         }
     });
+
     const drawerControllerRef = REF.createRef({
         state: drawerState,
         onStateUpdate: (element, state) => {
             if (state) {
-                element.classList.remove("collapsed");
-                element.classList.add("extended");
-            } else {
-                element.classList.remove("extended");
-                element.classList.add("collapsed");
+                element.innerHTML = 'Collapse &gt';
+                element.style.textAlign = 'center';
+            }
+            else{
+                element.innerHTML = '&lt';
+                element.style.textAlign = 'left';
             }
         },
         onElementMount: (element) => {
@@ -59,14 +98,14 @@
         }
     });
 
-    return `<div class="drawer left under-topbar-with-actions unselectable" ref="${drawerRef}">
+    return `<div class="sidebar right under-topbar-with-actions unselectable" ref="${drawerRef}">
+            <button class="button desktop-control" ref="${drawerControllerRef}" style="width:96%; margin: 10px 2% 10px 2%;"></button>
             ${controls.map(control => {
                 return `<div class="list">
                         <div class="item">${control}</div>
                     </div>`;
                 }).join('')}
-        </div>
-        <button class="drawer-control collapsed" ref="${drawerControllerRef}"><div></div></button>`;
+        </div>`;
 }
 
 function BranchSelector(callback) {
diff --git a/Tools/resultsdbpy/resultsdbpy/view/static/library/css/webkit.css b/Tools/resultsdbpy/resultsdbpy/view/static/library/css/webkit.css
index aa3b944..3db25d5 100644
--- a/Tools/resultsdbpy/resultsdbpy/view/static/library/css/webkit.css
+++ b/Tools/resultsdbpy/resultsdbpy/view/static/library/css/webkit.css
@@ -91,6 +91,7 @@
   --sectionPaddingSize: 12px 24px;
   --formLabelPadding: 14px;
   --topZIndex: 100;
+  --boldInverseColor: var(--black);
 }
 
 @media screen and (min-width: 600px) and (orientation: landscape) {
@@ -122,6 +123,7 @@
     --borderColorInlineElement: var(--greyDarker);
     --borderColorSection: var(--blackDark);
     --borderColorHard: var(--blackDarker);
+    --boldInverseColor: var(--white);
   }
 }
 
@@ -226,6 +228,7 @@
   font-size: var(--largeSize);
   font-weight: 400;
   flex: auto;
+  overflow: hidden;
 }
 
 .header>.title>.logo, .topbar>.title>.logo {
@@ -915,6 +918,15 @@
   position: fixed;
   border-right: 1px solid var(--borderColorSection);
   overflow-y: auto;
+  min-width: 250px;
+  background-color: var(--blurBackgroundColor);
+  -webkit-backdrop-filter: blur(5px) brightness(88%);
+  backdrop-filter: blur(5px) brightness(88%);
+  z-index: var(--topZIndex);
+  right: 0;
+}
+.sidebar.hidden {
+  display: none;
 }
 
 .sidebar>.header {
@@ -928,6 +940,14 @@
   padding-left: var(--colPaddingSize);
 }
 
+.mobile-sidebar-control {
+  display: none;
+  float: right;
+}
+.mobile-sidebar-control.display {
+  display: block;
+}
+
 @media (prefers-color-scheme: dark) {
   .sidebar {
     background-color: var(--blurBackgroundColorDark);
@@ -953,16 +973,35 @@
   overflow: auto;
 }
 
+.main.under-topbar-with-actions {
+  margin-top: calc(12px * 2  + var(--largeSize) * 1.3 + var(--smallSize) * 1.3 + 12px * 2);
+}
+
 @media screen and (min-width: 600px) and (orientation: landscape) {
   .sidebar {
-    width: 299px;
     display: block;
+    width: 299px;
+    z-index: 0;
+    left: 0;
+    right: unset;
+  }
+  .sidebar.left.hidden {
+    display: block;
+    left: -249px;
+  }
+  .sidebar.right.hidden {
+    display: block;
+    right: -249px;
   }
   .sidebar.under-topbar-with-actions {
     height: calc(100% - 12px * 2  - var(--largeSize) * 1.3);
     bottom: 0;
   }
 
+  .mobile-sidebar-control.display {
+    display: none;
+  }
+
   .main {
     margin-left: 299px;
     width: calc(100% - 299px);
@@ -972,6 +1011,15 @@
     margin-left: 0px;
     margin-right: 299px;
   }
+  .main.right.hidden {
+    margin-left: 50px;
+    width: calc(100% - 50px);
+  }
+  .main.left.hidden {
+    margin-left: 0;
+    margin-right: 50px;
+    width: calc(100% - 50px);
+  }
 
   .main.under-topbar-with-actions {
     margin-top: calc(12px * 2  + var(--largeSize) * 1.3);
@@ -980,8 +1028,19 @@
 
 @media screen and (min-width: 768px) and (orientation: landscape) {
   .sidebar {
-    width: 310px;
     display: block;
+    width: 310px;
+    z-index: 0;
+    left: 0;
+    right: unset;
+  }
+  .sidebar.left.hidden {
+    display: block;
+    left: -260px;
+  }
+  .sidebar.right.hidden {
+    display: block;
+    right: -260px;
   }
   .sidebar.under-topbar-with-actions {
     height: calc(100% - 12px * 2  - var(--largeSize) * 1.3);
@@ -1004,8 +1063,7 @@
 }
 
 .sidebar.right {
-  border-right: 0px;
-  border-left: 1px;
+  left: unset;
   right: 0;
 }
 
@@ -1753,6 +1811,11 @@
   }
 }
 
+a.disabled {
+  color: var(--grey);
+  pointer-events: none; 
+}
+
 /* timeline */
 .timeline {
   display: flex;
@@ -2594,3 +2657,13 @@
   -webkit-user-select: none;
   user-select: none;
 }
+
+.desktop-control {
+  display: none;
+}
+
+@media screen and (min-width: 600px) and (orientation: landscape) {
+  .desktop-control {
+    display: block;
+  }
+}
diff --git a/Tools/resultsdbpy/resultsdbpy/view/templates/base.html b/Tools/resultsdbpy/resultsdbpy/view/templates/base.html
index 25bebbb..0c0cd0e 100644
--- a/Tools/resultsdbpy/resultsdbpy/view/templates/base.html
+++ b/Tools/resultsdbpy/resultsdbpy/view/templates/base.html
@@ -35,7 +35,10 @@
 <body>
 <div class="header fixed">
     <div class="title">
-        <div class="text large block">{{site_title}}</div>
+        <div class="text large block" style="width: calc(100% - 44px); overflow: hidden; white-space: nowrap; text-overflow: ellipsis;">
+            {{site_title}}
+        </div>
+        <button style="width: 44px" class="button mobile-sidebar-control">☰</button>
     </div>
     <div class="actions">
         <div class="list">
diff --git a/Tools/resultsdbpy/resultsdbpy/view/templates/commits.html b/Tools/resultsdbpy/resultsdbpy/view/templates/commits.html
index 1e207e3..cde3b37 100644
--- a/Tools/resultsdbpy/resultsdbpy/view/templates/commits.html
+++ b/Tools/resultsdbpy/resultsdbpy/view/templates/commits.html
@@ -26,7 +26,6 @@
 {% extends "base.html" %}
 {% block head %}
 <link rel="stylesheet" type="text/css" href="assets/css/commit.css">
-<link rel="stylesheet" type="text/css" href="assets/css/drawer.css">
 
 <script type="module">
 import {REF, DOM} from '/library/js/Ref.js';
@@ -104,14 +103,17 @@
     LimitSlider(() => {table.reload()}),
     OneLineSwitch(),
     BranchSelector(() => {table.reload()}),
-])} ${table}`);
+])}
+<div class="main left under-topbar-with-actions">
+    <div class="content">${table}</div>
+</div>`);
 
 </script>
 
 {% endblock %}
 {% block content %}
 
-<div class="content" id="app">
+<div id="app">
 </div>
 
 
diff --git a/Tools/resultsdbpy/resultsdbpy/view/templates/documentation.html b/Tools/resultsdbpy/resultsdbpy/view/templates/documentation.html
index eca2fc2..c097321 100644
--- a/Tools/resultsdbpy/resultsdbpy/view/templates/documentation.html
+++ b/Tools/resultsdbpy/resultsdbpy/view/templates/documentation.html
@@ -24,11 +24,10 @@
 -->
 {% extends "base.html" %}
 {% block head %}
-<link rel="stylesheet" type="text/css" href="assets/css/drawer.css">
 
 <script type="module">
 
-import {DOM} from '/library/js/Ref.js';
+import {DOM, REF} from '/library/js/Ref.js';
 import {Expectations} from '/assets/js/timeline.js';
 
 function jumpIdUnderHeader(id) {
@@ -495,9 +494,23 @@
     }
 }
 
+const sidebarControl = document.getElementsByClassName('mobile-sidebar-control')[0];
+sidebarControl.classList.add('display');
+
+const sidebarRef = REF.createRef({
+    onElementMount: (element) => {
+        sidebarControl.onclick = () => {
+            if (element.style.display)
+                element.style.display = null;
+            else
+                element.style.display = 'block';
+        }
+    }
+});
+
 DOM.inject(
     document.getElementById('app'),
-    `<div class="sidebar under-topbar-with-actions">
+    `<div class="sidebar under-topbar-with-actions" ref="${sidebarRef}">
         <div class="list">
         ${Object.keys(documentation).map((primary) => {
             return `<div class="item">
diff --git a/Tools/resultsdbpy/resultsdbpy/view/templates/search.html b/Tools/resultsdbpy/resultsdbpy/view/templates/search.html
index 37ed192..63a9ade 100644
--- a/Tools/resultsdbpy/resultsdbpy/view/templates/search.html
+++ b/Tools/resultsdbpy/resultsdbpy/view/templates/search.html
@@ -25,7 +25,6 @@
 
 {% extends "base.html" %}
 {% block head %}
-<link rel="stylesheet" type="text/css" href="assets/css/drawer.css">
 <link rel="stylesheet" type="text/css" href="assets/css/search.css">
 <link rel="stylesheet" type="text/css" href="assets/css/timeline.css">
 <link rel="stylesheet" type="text/css" href="assets/css/tooltip.css">
@@ -227,33 +226,37 @@
         ConfigurationSelectors(() => {view.reload()}),
     ])}
 
-    ${SearchBar(function () {
-        const splitURL = document.URL.split('?');
-        let params = queryToParams(splitURL[1]);
-        if (!params.suite)
-            params.suite = [];
-        if (!params.test)
-            params.test = [];
+    <div class="main left under-topbar-with-actions">
+        <div class="content">
+            ${SearchBar(function () {
+                const splitURL = document.URL.split('?');
+                let params = queryToParams(splitURL[1]);
+                if (!params.suite)
+                    params.suite = [];
+                if (!params.test)
+                    params.test = [];
 
-        for (let i = 0; i < arguments.length; i++) {
-            let needToAdd = true;
-            if (!needToAdd)
-                continue;
+                for (let i = 0; i < arguments.length; i++) {
+                    let needToAdd = true;
+                    if (!needToAdd)
+                        continue;
 
-            let child = {
-                suite: arguments[i].suite,
-                test: arguments[i].test,
-                timeline: new TimelineFromEndpoint(`api/results/${arguments[i].suite}/${arguments[i].test}`),
-            }
+                    let child = {
+                        suite: arguments[i].suite,
+                        test: arguments[i].test,
+                        timeline: new TimelineFromEndpoint(`api/results/${arguments[i].suite}/${arguments[i].test}`),
+                    }
 
-            view.ref.setState({prepending: [child]});
-            params.suite.push(child.suite);
-            params.test.push(child.test);
-        }
-        const queryString = paramsToQuery(params);
-        window.history.pushState(queryString, '', splitURL[0] + '?' + queryString);
-    }, SUITES)}
-    ${view}`
+                    view.ref.setState({prepending: [child]});
+                    params.suite.push(child.suite);
+                    params.test.push(child.test);
+                }
+                const queryString = paramsToQuery(params);
+                window.history.pushState(queryString, '', splitURL[0] + '?' + queryString);
+            }, SUITES)}
+            ${view}
+        </div>
+    </div>`
 );
 
 </script>
@@ -261,7 +264,7 @@
 {% endblock %}
 {% block content %}
 
-<div class="content" id="app">
+<div id="app">
 </div>
 
 {% endblock %}
diff --git a/Tools/resultsdbpy/resultsdbpy/view/templates/suite_results.html b/Tools/resultsdbpy/resultsdbpy/view/templates/suite_results.html
index 48d3bec..e3ff8a0 100644
--- a/Tools/resultsdbpy/resultsdbpy/view/templates/suite_results.html
+++ b/Tools/resultsdbpy/resultsdbpy/view/templates/suite_results.html
@@ -25,7 +25,6 @@
 
 {% extends "base.html" %}
 {% block head %}
-<link rel="stylesheet" type="text/css" href="assets/css/drawer.css">
 <link rel="stylesheet" type="text/css" href="assets/css/search.css">
 <link rel="stylesheet" type="text/css" href="assets/css/timeline.css">
 <link rel="stylesheet" type="text/css" href="assets/css/tooltip.css">
@@ -170,15 +169,18 @@
     }),
     ConfigurationSelectors(() => {view.reload()}),
 ])}
-${view}
-`);
+<div class="main left under-topbar-with-actions">
+    <div class="content">
+        ${view}
+    </div>
+</div>`);
 
 </script>
 
 {% endblock %}
 {% block content %}
 
-<div class="content" id="app">
+<div id="app">
 </div>
 
 {% endblock %}
diff --git a/Tools/resultsdbpy/resultsdbpy/view/view_routes_unittest.py b/Tools/resultsdbpy/resultsdbpy/view/view_routes_unittest.py
index ae4d5c8..e4a24e4 100644
--- a/Tools/resultsdbpy/resultsdbpy/view/view_routes_unittest.py
+++ b/Tools/resultsdbpy/resultsdbpy/view/view_routes_unittest.py
@@ -41,15 +41,16 @@
     KEYSPACE = 'web_site_testcase_keyspace'
 
     def toggle_drawer(self, driver, assert_displayed=None):
-        driver.find_element_by_class_name('drawer-control').click()
+        sidebar = driver.find_element_by_class_name('sidebar')
+        sidebar.find_elements_by_tag_name('button')[0].click()
         time.sleep(.5)
         if assert_displayed:
-            self.assertIn('display', driver.find_element_by_class_name('drawer').get_attribute('class'))
+            self.assertNotIn('hidden', sidebar.get_attribute('class'))
         elif assert_displayed is False:
-            self.assertNotIn('display', driver.find_element_by_class_name('drawer').get_attribute('class'))
+            self.assertIn('hidden', sidebar.get_attribute('class'))
 
     def find_input_with_name(self, driver, name):
-        control = [label.parent for label in driver.find_element_by_class_name('drawer').find_elements_by_tag_name('div') if label.find_element_by_tag_name('label').text == name][0]
+        control = [label.parent for label in driver.find_element_by_class_name('sidebar').find_elements_by_tag_name('div') if label.find_element_by_tag_name('label').text == name][0]
         self.assertIsNotNone(control)
         return control
 
@@ -102,7 +103,7 @@
         driver.get(self.URL)
         self.assertEqual(driver.title, 'Results Database')
         title = driver.find_element_by_class_name('title').find_element_by_tag_name('div')
-        self.assertEqual(title.text, 'Results Database')
+        self.assertEqual(title.text.lstrip().rstrip(), 'Results Database')
 
     @WaitForDockerTestCase.mock_if_no_docker(mock_redis=FakeStrictRedis, mock_cassandra=MockCassandraContext)
     @WebSiteTestCase.decorator()
