test_visibility.py (6574B)
1 # This Source Code Form is subject to the terms of the Mozilla Public 2 # License, v. 2.0. If a copy of the MPL was not distributed with this 3 # file, You can obtain one at http://mozilla.org/MPL/2.0/. 4 5 from urllib.parse import quote 6 7 from marionette_driver.by import By 8 9 from marionette_harness import MarionetteTestCase 10 11 12 def inline(doc): 13 return "data:text/html;charset=utf-8,{}".format(quote(doc)) 14 15 16 def element_direction_doc(direction): 17 return inline( 18 """ 19 <meta name="viewport" content="initial-scale=1,width=device-width"> 20 <style> 21 .element{{ 22 position: absolute; 23 {}: -50px; 24 background_color: red; 25 width: 100px; 26 height: 100px; 27 }} 28 </style> 29 <div class='element'></div>""".format( 30 direction 31 ) 32 ) 33 34 35 class TestVisibility(MarionetteTestCase): 36 def testShouldAllowTheUserToTellIfAnElementIsDisplayedOrNot(self): 37 test_html = self.marionette.absolute_url("visibility.html") 38 self.marionette.navigate(test_html) 39 40 self.assertTrue(self.marionette.find_element(By.ID, "displayed").is_displayed()) 41 self.assertFalse(self.marionette.find_element(By.ID, "none").is_displayed()) 42 self.assertFalse( 43 self.marionette.find_element(By.ID, "suppressedParagraph").is_displayed() 44 ) 45 self.assertFalse(self.marionette.find_element(By.ID, "hidden").is_displayed()) 46 47 def testVisibilityShouldTakeIntoAccountParentVisibility(self): 48 test_html = self.marionette.absolute_url("visibility.html") 49 self.marionette.navigate(test_html) 50 51 childDiv = self.marionette.find_element(By.ID, "hiddenchild") 52 hiddenLink = self.marionette.find_element(By.ID, "hiddenlink") 53 54 self.assertFalse(childDiv.is_displayed()) 55 self.assertFalse(hiddenLink.is_displayed()) 56 57 def testShouldCountElementsAsVisibleIfStylePropertyHasBeenSet(self): 58 test_html = self.marionette.absolute_url("visibility.html") 59 self.marionette.navigate(test_html) 60 shown = self.marionette.find_element(By.ID, "visibleSubElement") 61 self.assertTrue(shown.is_displayed()) 62 63 def testShouldModifyTheVisibilityOfAnElementDynamically(self): 64 test_html = self.marionette.absolute_url("visibility.html") 65 self.marionette.navigate(test_html) 66 element = self.marionette.find_element(By.ID, "hideMe") 67 self.assertTrue(element.is_displayed()) 68 element.click() 69 self.assertFalse(element.is_displayed()) 70 71 def testHiddenInputElementsAreNeverVisible(self): 72 test_html = self.marionette.absolute_url("visibility.html") 73 self.marionette.navigate(test_html) 74 75 shown = self.marionette.find_element(By.NAME, "hidden") 76 77 self.assertFalse(shown.is_displayed()) 78 79 def test_elements_not_displayed_with_negative_transform(self): 80 self.marionette.navigate( 81 inline( 82 """ 83 <div id="y" style="transform: translateY(-200%);">hidden</div> 84 <div id="x" style="transform: translateX(-200%);">hidden</div> 85 """ 86 ) 87 ) 88 89 element_x = self.marionette.find_element(By.ID, "x") 90 self.assertFalse(element_x.is_displayed()) 91 element_y = self.marionette.find_element(By.ID, "y") 92 self.assertFalse(element_y.is_displayed()) 93 94 def test_elements_not_displayed_with_parents_having_negative_transform(self): 95 self.marionette.navigate( 96 inline( 97 """ 98 <div style="transform: translateY(-200%);"><p id="y">hidden</p></div> 99 <div style="transform: translateX(-200%);"><p id="x">hidden</p></div> 100 """ 101 ) 102 ) 103 104 element_x = self.marionette.find_element(By.ID, "x") 105 self.assertFalse(element_x.is_displayed()) 106 element_y = self.marionette.find_element(By.ID, "y") 107 self.assertFalse(element_y.is_displayed()) 108 109 def test_element_displayed_with_zero_transform(self): 110 self.marionette.navigate( 111 inline( 112 """ 113 <div style="transform: translate(0px, 0px);">not hidden</div> 114 """ 115 ) 116 ) 117 element = self.marionette.find_element(By.TAG_NAME, "div") 118 self.assertTrue(element.is_displayed()) 119 120 def test_element_displayed_with_negative_transform_but_in_viewport(self): 121 self.marionette.navigate( 122 inline( 123 """ 124 <div style="margin-top: 1em; transform: translateY(-75%);">not hidden</div> 125 """ 126 ) 127 ) 128 element = self.marionette.find_element(By.TAG_NAME, "div") 129 self.assertTrue(element.is_displayed()) 130 131 def testShouldSayElementIsInvisibleWhenOverflowXIsHiddenAndOutOfViewport(self): 132 test_html = self.marionette.absolute_url("bug814037.html") 133 self.marionette.navigate(test_html) 134 overflow_x = self.marionette.find_element(By.ID, "assertMe2") 135 self.assertFalse(overflow_x.is_displayed()) 136 137 def testShouldShowElementNotVisibleWithHiddenAttribute(self): 138 self.marionette.navigate( 139 inline( 140 """ 141 <p hidden>foo</p> 142 """ 143 ) 144 ) 145 singleHidden = self.marionette.find_element(By.TAG_NAME, "p") 146 self.assertFalse(singleHidden.is_displayed()) 147 148 def testShouldShowElementNotVisibleWhenParentElementHasHiddenAttribute(self): 149 self.marionette.navigate( 150 inline( 151 """ 152 <div hidden> 153 <p>foo</p> 154 </div> 155 """ 156 ) 157 ) 158 child = self.marionette.find_element(By.TAG_NAME, "p") 159 self.assertFalse(child.is_displayed()) 160 161 def testShouldClickOnELementPartiallyOffLeft(self): 162 test_html = self.marionette.navigate(element_direction_doc("left")) 163 self.marionette.find_element(By.CSS_SELECTOR, ".element").click() 164 165 def testShouldClickOnELementPartiallyOffRight(self): 166 test_html = self.marionette.navigate(element_direction_doc("right")) 167 self.marionette.find_element(By.CSS_SELECTOR, ".element").click() 168 169 def testShouldClickOnELementPartiallyOffTop(self): 170 test_html = self.marionette.navigate(element_direction_doc("top")) 171 self.marionette.find_element(By.CSS_SELECTOR, ".element").click() 172 173 def testShouldClickOnELementPartiallyOffBottom(self): 174 test_html = self.marionette.navigate(element_direction_doc("bottom")) 175 self.marionette.find_element(By.CSS_SELECTOR, ".element").click()