@@ -109,7 +109,7 @@ def table_column_should_contain(self, locator, column, expected, loglevel='INFO'
109109 See `Page Should Contain Element` for explanation about the
110110 ``loglevel`` argument.
111111 """
112- element = self .table_element_finder . find_by_column (locator , column , expected )
112+ element = self ._find_by_column (locator , column , expected )
113113 if element is None :
114114 self .ctx .log_source (loglevel )
115115 raise AssertionError ("Table '%s' column %s did not contain text "
@@ -128,7 +128,7 @@ def table_footer_should_contain(self, locator, expected, loglevel='INFO'):
128128 See `Page Should Contain Element` for explanation about the
129129 ``loglevel`` argument.
130130 """
131- element = self .table_element_finder . find_by_footer (locator , expected )
131+ element = self ._find_by_footer (locator , expected )
132132 if element is None :
133133 self .ctx .log_source (loglevel )
134134 raise AssertionError ("Table '%s' footer did not contain text "
@@ -147,7 +147,7 @@ def table_header_should_contain(self, locator, expected, loglevel='INFO'):
147147 See `Page Should Contain Element` for explanation about the
148148 ``loglevel`` argument.
149149 """
150- element = self .table_element_finder . find_by_header (locator , expected )
150+ element = self ._find_by_header (locator , expected )
151151 if element is None :
152152 self .ctx .log_source (loglevel )
153153 raise AssertionError ("Table '%s' header did not contain text "
@@ -171,7 +171,7 @@ def table_row_should_contain(self, locator, row, expected, loglevel='INFO'):
171171 See `Page Should Contain Element` for explanation about the
172172 ``loglevel`` argument.
173173 """
174- element = self .table_element_finder . find_by_row (locator , row , expected )
174+ element = self ._find_by_row (locator , row , expected )
175175 if element is None :
176176 self .ctx .log_source (loglevel )
177177 raise AssertionError ("Table '%s' row %s did not contain text "
@@ -187,8 +187,47 @@ def table_should_contain(self, locator, expected, loglevel='INFO'):
187187 See `Page Should Contain Element` for explanation about the
188188 ``loglevel`` argument.
189189 """
190- element = self .table_element_finder . find_by_content (locator , expected )
190+ element = self ._find_by_content (locator , expected )
191191 if element is None :
192192 self .ctx .log_source (loglevel )
193193 raise AssertionError ("Table '%s' did not contain text '%s'."
194194 % (locator , expected ))
195+
196+ def _find_by_content (self , table_locator , content ):
197+ return self ._find (table_locator , '//*' , content )
198+
199+ def _find_by_header (self , table_locator , content ):
200+ return self ._find (table_locator , '//th' , content )
201+
202+ def _find_by_footer (self , table_locator , content ):
203+ return self ._find (table_locator , '//tfoot//td' , content )
204+
205+ def _find_by_row (self , table_locator , row , content ):
206+ position = self ._index_to_position (row )
207+ locator = '//tr[{}]' .format (position )
208+ return self ._find (table_locator , locator , content )
209+
210+ def _find_by_column (self , table_locator , col , content ):
211+ position = self ._index_to_position (col )
212+ locator = '//tr//*[self::td or self::th][{}]' .format (position )
213+ return self ._find (table_locator , locator , content )
214+
215+ def _index_to_position (self , index ):
216+ index = int (index )
217+ if index == 0 :
218+ raise ValueError ('Row and column indexes must be non-zero.' )
219+ if index > 0 :
220+ return str (index )
221+ if index == - 1 :
222+ return 'position()=last()'
223+ return 'position()=last()-{}' .format (abs (index ) - 1 )
224+
225+ def _find (self , table_locator , locator , content ):
226+ table = self .find_element (table_locator )
227+ elements = self .find_elements (locator , parent = table )
228+ for element in elements :
229+ if content is None :
230+ return element
231+ if element .text and content in element .text :
232+ return element
233+ return None
0 commit comments