diff options
| -rw-r--r-- | archaeological_context_records/tests.py | 64 | ||||
| -rw-r--r-- | archaeological_finds/tests.py | 82 | ||||
| -rw-r--r-- | archaeological_operations/tests.py | 43 | ||||
| -rw-r--r-- | ishtar_common/static/js/ishtar-map.js | 2 | ||||
| -rw-r--r-- | ishtar_common/templates/ishtar/blocks/sheet_geo_items.html | 2 | ||||
| -rw-r--r-- | ishtar_common/tests.py | 39 | 
6 files changed, 186 insertions, 46 deletions
| diff --git a/archaeological_context_records/tests.py b/archaeological_context_records/tests.py index 769d6a2b2..c1117a68d 100644 --- a/archaeological_context_records/tests.py +++ b/archaeological_context_records/tests.py @@ -1369,13 +1369,27 @@ class GraphGenerationTest(ContextRecordInit, TestCase):  class SeleniumTestsContextRecords(SeleniumTests):      fixtures = CONTEXT_RECORD_FIXTURES -    def _test_cr(self, i, pks, geojsons): -        infos = self.selenium.find_element_by_xpath('//tbody/tr[' + str(i) + ']/td/a[@class="display_details"]') -        self.scroll(infos) -        infos.click() - -        label = self.selenium.find_element_by_xpath('//small[@title="ID interne" or @title="Internal ID"]').text -        label = label[1:] +    def _test_cr(self, i, pks, geojsons, method=None): +        if method == 'from operation': +            tbody = '.' + '/div' * 6 + '/table/tbody' +            title = self.selenium.find_element_by_xpath( +                '//h3[contains(text(), "Unité d\'Enregistrement") or contains(text(), "Context record")]') +            panel = title.find_element_by_xpath('./..') +            details = panel.find_element_by_xpath(tbody + '/tr[' + str(i) + ']/td/a[@class="display_details"]') +            self.scroll(details) +            label = panel.find_element_by_xpath(tbody + '/tr[' + str(i) + ']/td[2]').text +            details.click() +        else: +            tbody = './form' + '/div' * 7 + '/table/tbody' +            title = '//h3[text()="Rechercher une unité d\'enregistrement" or text()="Context record search"]' +            self.WebDriverWait(self.selenium, 2).until(lambda driver: driver.find_element_by_xpath(title)) +            title = self.selenium.find_element_by_xpath(title) +            panel = title.find_element_by_xpath('./..') +            details = panel.find_element_by_xpath(tbody + '/tr[' + str(i) + ']/td/a[@class="display_details"]') +            self.scroll(details) +            details.click() +            label = self.selenium.find_element_by_xpath('//small[@title="ID interne" or @title="Internal ID"]').text +            label = label[1:]          cr = models.ContextRecord.objects.get(pk=pks[label])          slug_pk = str(cr.SLUG) + "-" + str(cr.pk) @@ -1383,9 +1397,9 @@ class SeleniumTestsContextRecords(SeleniumTests):              base = copy.deepcopy(geojsons[label]['get_pts'])          else:              base = copy.deepcopy(geojsons[label]['get_polys']) -        self.assertMap(base, slug_pk)          get_poly_id = "get-poly-for-" + slug_pk +        get_poly_label_id = "get-poly-label-for-" + slug_pk          disp_bf_id = "disp-bf-for-" + slug_pk          cr_polys = geojsons[label]['get_polys'] @@ -1404,10 +1418,13 @@ class SeleniumTestsContextRecords(SeleniumTests):              lambda driver: driver.find_element_by_xpath(                  '//dl[@class="col-12"]/dt[text()="Display geo items" or text()="Afficher les éléments"]'))          dd = '//dl[@class="col-12"]/dd' +        self.selenium.find_element_by_xpath(dd + '/fieldset/label[@for="' + disp_bf_id + '"]')          disp_bf = self.selenium.find_element_by_xpath(dd + '/fieldset/input[@id="' + disp_bf_id + '"]')          self.assertFalse(disp_bf.is_selected())          select_get_poly = dd + '/select[@id="' + get_poly_id + '"]' +        get_poly_label = dd + '/label[@id="' + get_poly_label_id + '"]'          self.assertNotInDOM(select_get_poly) +        self.assertNotInDOM(get_poly_label)          self.assertMap(base, slug_pk)          # context record specific @@ -1416,15 +1433,19 @@ class SeleniumTestsContextRecords(SeleniumTests):          self.selenium.execute_script('return initialize_test_map(arguments[0])', slug_pk)          self.scroll(disp_bf)          disp_bf.click() +        select_get_poly = dd + '/select[@id="' + get_poly_id + '"]' +        get_poly = self.selenium.find_element_by_xpath(select_get_poly) +        get_poly.click() +        self.selenium.find_element_by_xpath(select_get_poly + '/option[@value="polygons"]').click()          bf_geoms = [              bf_polys,              {'type': 'FeatureCollection', 'features': []}          ]          self.assertTrue(disp_bf.is_selected()) +        self.selenium.find_element_by_xpath(get_poly_label)          self.assertMap(base, slug_pk, bf_geoms) -        select_get_poly = dd + '/select[@id="' + get_poly_id + '"]'          get_poly = self.selenium.find_element_by_xpath(select_get_poly)          get_poly.click()          self.selenium.find_element_by_xpath(select_get_poly + '/option[@value="points"]').click() @@ -1433,6 +1454,7 @@ class SeleniumTestsContextRecords(SeleniumTests):              {'type': 'FeatureCollection', 'features': []}          ]          self.assertTrue(disp_bf.is_selected()) +        self.selenium.find_element_by_xpath(get_poly_label)          self.assertMap(base, slug_pk, bf_geoms)          # Click on "None" @@ -1440,10 +1462,29 @@ class SeleniumTestsContextRecords(SeleniumTests):          disp_bf.click()          self.assertFalse(disp_bf.is_selected())          self.assertNotInDOM(select_get_poly) +        self.assertNotInDOM(get_poly_label)          self.assertMap(base, slug_pk)      def test_geo_items(self):          pks, geojsons = self.pks_and_geojson() +        # from operation +        for i in range(1, 3): +            self.WebDriverWait(self.selenium, 2).until( +                lambda driver: driver.find_element_by_xpath( +                    '//a[@class="nav-link dropdown-toggle"][@id="dropdown-menu-main"]')) +            dropdown = self.selenium.find_element_by_xpath( +                '//a[@class="nav-link dropdown-toggle"][@id="dropdown-menu-main"]') +            self.scroll(dropdown) +            dropdown.click() +            self.selenium.find_element_by_xpath('//div[@class="dropdown-menu show"]/a[@href="/operation_search/"]').click() +            details = self.selenium.find_element_by_xpath('//tbody/tr[' + str(i) + ']/td/a[@class="display_details"]') +            self.scroll(details) +            details.click() +            self.selenium.find_element_by_xpath( +                '//ul[@role="tablist"]/li/a[contains(text(), "Unités d\'Enregistrement") or contains(text(), "Context records")]').click() +            for j in range(1, 3): +                self._test_cr(j, pks, copy.deepcopy(geojsons), method="from operation") +        # from search bar          for i in range(1, 5):              self.WebDriverWait(self.selenium, 2).until(                  lambda driver: driver.find_element_by_xpath( @@ -1453,4 +1494,7 @@ class SeleniumTestsContextRecords(SeleniumTests):              self.scroll(dropdown)              dropdown.click()              self.selenium.find_element_by_xpath('//div[@class="dropdown-menu show"]/a[@href="/record_search/"]').click() -            self._test_cr(i, pks, geojsons) +            self._test_cr(i, pks, copy.deepcopy(geojsons)) +        # from bottom table, multiple displays +        for i in range(1, 4): +            self._test_cr(i, pks, copy.deepcopy(geojsons)) diff --git a/archaeological_finds/tests.py b/archaeological_finds/tests.py index 5d13bd2dd..734f4f66f 100644 --- a/archaeological_finds/tests.py +++ b/archaeological_finds/tests.py @@ -23,6 +23,7 @@ import json  import os  import shutil  import tempfile +from time import time  from rest_framework.test import APITestCase  from rest_framework.authtoken.models import Token @@ -2859,16 +2860,33 @@ class TemplateTest(FindInit, TestCase):  class SeleniumTestsBaseFinds(SeleniumTests):      fixtures = FIND_FIXTURES -    def _test_bf(self, i, pks, geojsons): -        bf_infos = self.selenium.find_element_by_xpath('//tbody/tr[' + str(i) + ']/td/a[@class="display_details"]') -        self.scroll(bf_infos) -        bf_infos.click() - -        bf_label = self.selenium.find_element_by_xpath('//small[@title="ID interne" or @title="Internal ID"]').text -        bf_label = bf_label.split('-') -        self.assertEqual(len(bf_label), 3) -        bf_label = bf_label[2] -        bf = models.BaseFind.objects.get(pk=pks[bf_label]) +    def _test_bf(self, i, pks, geojsons, from_search=False): +        title = self.selenium.find_element_by_xpath('//h3[contains(text(), "Mobilier") or contains(text(), "Find")]') +        panel = title.find_element_by_xpath('./..') +        if from_search: +            tbody = './form' + '/div' * 7 + '/table/tbody' +        else: +            tbody = '.' + '/div' * 6 + '/table/tbody' +        details = panel.find_element_by_xpath(tbody + '/tr[' + str(i) + ']/td/a[@class="display_details"]') +        self.scroll(details) +        details.click() +        label = None +        timeout = 20 +        t = time() +        while not label and time()-t < timeout: +            for internalId in self.selenium.find_elements_by_xpath('//small[@title="ID interne" or @title="Internal ID"]'): +                if 'Find' in internalId.text: +                    label = internalId.text +                    break +        '''label = '//small[@title="ID interne" or @title="Internal ID"][contains(text(), "Find")]' +        self.WebDriverWait(self.selenium, 2).until( +            lambda driver: driver.find_element_by_xpath(label)) +        label = self.selenium.find_element_by_xpath(label).text''' +        label = label.split('-') +        self.assertEqual(len(label), 3) +        label = label[2] + +        bf = models.BaseFind.objects.get(pk=pks[label])          slug_pk = str(bf.SLUG) + "-" + str(bf.pk)          print('ACHTUNG: ', bf.most_precise_geo())          print(bf.multi_polygon.coords) @@ -2879,9 +2897,9 @@ class SeleniumTestsBaseFinds(SeleniumTests):          print(bf.point_source_item)          if False: #geojsons[bf_label]['precise'] -            bf_base = geojsons[bf_label]['get_pts'] +            bf_base = geojsons[label]['get_pts']          else: -            bf_base = geojsons[bf_label]['get_polys'] +            bf_base = geojsons[label]['get_polys']          self.assertMap(bf_base, slug_pk)          title = '//dl[@class="col-12"]/dt[text()="Display geo items" or text()="Afficher les éléments"]' @@ -2894,6 +2912,41 @@ class SeleniumTestsBaseFinds(SeleniumTests):      def test_geo_items(self):          pks, geojsons = self.pks_and_geojson() +        # from operation +        for i in range(1, 3): +            self.WebDriverWait(self.selenium, 2).until( +                lambda driver: driver.find_element_by_xpath( +                    '//a[@class="nav-link dropdown-toggle"][@id="dropdown-menu-main"]')) +            dropdown = self.selenium.find_element_by_xpath( +                '//a[@class="nav-link dropdown-toggle"][@id="dropdown-menu-main"]') +            self.scroll(dropdown) +            dropdown.click() +            self.selenium.find_element_by_xpath('//div[@class="dropdown-menu show"]/a[@href="/operation_search/"]').click() +            details = self.selenium.find_element_by_xpath('//tbody/tr[' + str(i) + ']/td/a[@class="display_details"]') +            self.scroll(details) +            details.click() +            self.selenium.find_element_by_xpath( +                '//ul[@role="tablist"]/li/a[contains(text(), "Mobilier") or contains(text(), "Finds")]').click() +            for j in range(1, 5): +                self._test_bf(j, pks, copy.deepcopy(geojsons)) +        # from context record +        for i in range(1, 5): +            self.WebDriverWait(self.selenium, 2).until( +                lambda driver: driver.find_element_by_xpath( +                    '//a[@class="nav-link dropdown-toggle"][@id="dropdown-menu-main"]')) +            dropdown = self.selenium.find_element_by_xpath( +                '//a[@class="nav-link dropdown-toggle"][@id="dropdown-menu-main"]') +            self.scroll(dropdown) +            dropdown.click() +            self.selenium.find_element_by_xpath('//div[@class="dropdown-menu show"]/a[@href="/record_search/"]').click() +            details = self.selenium.find_element_by_xpath('//tbody/tr[' + str(i) + ']/td/a[@class="display_details"]') +            self.scroll(details) +            details.click() +            self.selenium.find_element_by_xpath( +                '//ul[@role="tablist"]/li/a[contains(text(), "Mobilier") or contains(text(), "Finds")]').click() +            for j in range(1, 3): +                self._test_bf(j, pks, copy.deepcopy(geojsons)) +        # from search          for i in range(1, 9):              self.WebDriverWait(self.selenium, 2).until(                  lambda driver: driver.find_element_by_xpath( @@ -2902,4 +2955,7 @@ class SeleniumTestsBaseFinds(SeleniumTests):              self.scroll(dropdown)              dropdown.click()              self.selenium.find_element_by_xpath('//div[@class="dropdown-menu show"]/a[@href="/find_search/"]').click() -            self._test_bf(i, pks, geojsons) +            self._test_bf(i, pks, copy.deepcopy(geojsons), from_search=True) +        # from bottom table +        for i in range(1,8): +            self._test_bf(i, pks, copy.deepcopy(geojsons), from_search=True) diff --git a/archaeological_operations/tests.py b/archaeological_operations/tests.py index a4b73453e..3452b78fc 100644 --- a/archaeological_operations/tests.py +++ b/archaeological_operations/tests.py @@ -16,7 +16,7 @@  # along with this program.  If not, see <http://www.gnu.org/licenses/>.  # See the file COPYING for details. - +import copy  import json  import datetime  from subprocess import Popen, PIPE @@ -4245,6 +4245,7 @@ class SeleniumTestsOperations(SeleniumTests):      def _test_operation(self, i, slug_pk, geojsons, label):          get_poly_id = "get-poly-for-" + slug_pk +        get_poly_label_id = "get-poly-label-for-" + slug_pk          disp_cr_id = "disp-cr-for-" + slug_pk          disp_bf_id = "disp-bf-for-" + slug_pk @@ -4274,24 +4275,31 @@ class SeleniumTestsOperations(SeleniumTests):              ope_base = geojsons[label]['get_pts']          else:              ope_base = geojsons[label]['get_polys'] - -        self.selenium.find_element_by_xpath('//tbody/tr[' + str(i) + ']/td/a[@class="display_details"]').click() +        title = self.selenium.find_element_by_xpath( +            '//h3[text()="Rechercher une opération" or text()="Operation search"]') +        panel = title.find_element_by_xpath('./..') +        tbody = './form' + '/div'*7 + '/table/tbody' +        details = panel.find_element_by_xpath(tbody + '/tr[' + str(i) + ']/td/a[@class="display_details"]') +        self.scroll(details) +        details.click()          self.WebDriverWait(self.selenium, 2).until(              lambda driver: driver.find_element_by_xpath( -                '//dl[@class="col-12"]/dt[text()="Display geo items" or text()="Afficher les éléments"]')) +                '//dl[@class="col-12"]/dt[@id="display-geo-items-for-' + slug_pk + '"]'))          dd = '//dl[@class="col-12"]/dd' -        self.selenium.find_element_by_xpath(dd + '/fieldset/label[text()="Display context records"]') +        self.selenium.find_element_by_xpath(dd + '/fieldset/label[@for="' + disp_cr_id + '"]')          disp_cr = self.selenium.find_element_by_xpath(dd + '/fieldset/input[@id="' + disp_cr_id + '"]') -        self.selenium.find_element_by_xpath(dd + '/fieldset/label[text()="Display context records"]') +        self.selenium.find_element_by_xpath(dd + '/fieldset/label[@for="' + disp_bf_id + '"]')          disp_bf = self.selenium.find_element_by_xpath(dd + '/fieldset/input[@id="' + disp_bf_id + '"]')          self.assertFalse(disp_cr.is_selected())          self.assertFalse(disp_bf.is_selected())          select_get_poly = dd + '/select[@id="' + get_poly_id + '"]' +        get_poly_label = dd + '/label[@id="' + get_poly_label_id + '"]'          self.assertNotInDOM(select_get_poly) +        self.assertNotInDOM(get_poly_label)          self.assertMap(ope_base, slug_pk)          # click on "Context records" -        self.selenium.execute_script('return initialize_test_map(arguments[0])', slug_pk) +        self.selenium.execute_script('initialize_test_map(arguments[0])', slug_pk)          self.scroll(disp_cr)          disp_cr.click() @@ -4301,6 +4309,7 @@ class SeleniumTestsOperations(SeleniumTests):          ]          self.assertTrue(disp_cr.is_selected())          self.assertFalse(disp_bf.is_selected()) +        self.selenium.find_element_by_xpath(get_poly_label)          self.assertMap(ope_base, slug_pk, cr_geoms)          get_poly = self.selenium.find_element_by_xpath(select_get_poly) @@ -4312,26 +4321,29 @@ class SeleniumTestsOperations(SeleniumTests):          ]          self.assertTrue(disp_cr.is_selected())          self.assertFalse(disp_bf.is_selected()) +        self.selenium.find_element_by_xpath(get_poly_label)          self.assertMap(ope_base, slug_pk, cr_geoms)          # Click on everything -        self.selenium.execute_script('return initialize_test_map(arguments[0])', slug_pk) +        self.selenium.execute_script('initialize_test_map(arguments[0])', slug_pk)          disp_bf.click()          every_geoms = [bf_pts, cr_pts]          self.assertTrue(disp_cr.is_selected())          self.assertTrue(disp_bf.is_selected()) +        self.selenium.find_element_by_xpath(get_poly_label)          self.assertMap(ope_base, slug_pk, every_geoms) -        self.selenium.execute_script('return initialize_test_map(arguments[0])', slug_pk) +        self.selenium.execute_script('initialize_test_map(arguments[0])', slug_pk)          get_poly.click()          self.selenium.find_element_by_xpath(select_get_poly + '/option[@value="polygons"]').click()          every_geoms = [bf_polys, cr_polys]          self.assertTrue(disp_cr.is_selected())          self.assertTrue(disp_bf.is_selected()) +        self.selenium.find_element_by_xpath(get_poly_label)          self.assertMap(ope_base, slug_pk, every_geoms)          # click on "Base finds" -        self.selenium.execute_script('return initialize_test_map(arguments[0])', slug_pk) +        self.selenium.execute_script('initialize_test_map(arguments[0])', slug_pk)          self.scroll(disp_cr)          disp_cr.click() @@ -4341,6 +4353,7 @@ class SeleniumTestsOperations(SeleniumTests):          ]          self.assertFalse(disp_cr.is_selected())          self.assertTrue(disp_bf.is_selected()) +        self.selenium.find_element_by_xpath(get_poly_label)          self.assertMap(ope_base, slug_pk, bf_geoms)          select_get_poly = dd + '/select[@id="' + get_poly_id + '"]' @@ -4353,14 +4366,16 @@ class SeleniumTestsOperations(SeleniumTests):          ]          self.assertFalse(disp_cr.is_selected())          self.assertTrue(disp_bf.is_selected()) +        self.selenium.find_element_by_xpath(get_poly_label)          self.assertMap(ope_base, slug_pk, bf_geoms)          # Click on "None" -        self.selenium.execute_script('return initialize_test_map(arguments[0])', slug_pk) +        self.selenium.execute_script('initialize_test_map(arguments[0])', slug_pk)          disp_bf.click()          self.assertFalse(disp_cr.is_selected())          self.assertFalse(disp_bf.is_selected())          self.assertNotInDOM(select_get_poly) +        self.assertNotInDOM(get_poly_label)          self.assertMap(ope_base, slug_pk)      def test_geo_items(self): @@ -4373,7 +4388,7 @@ class SeleniumTestsOperations(SeleniumTests):          self.selenium.find_element_by_xpath('//div[@class="dropdown-menu show"]/a[@href="/operation_search/"]').click()          ope = models.Operation.objects.get(pk=pks['Poly'])          slug_pk_poly = str(ope.SLUG) + "-" + str(ope.pk) -        self._test_operation(2, slug_pk_poly, geojsons, 'Poly') +        self._test_operation(2, slug_pk_poly, copy.deepcopy(geojsons), 'Poly')          dropdown = self.selenium.find_element_by_xpath(              '//a[@class="nav-link dropdown-toggle"][@id="dropdown-menu-main"]') @@ -4387,5 +4402,7 @@ class SeleniumTestsOperations(SeleniumTests):          print(ope.multi_polygon.coords)          print(ope.point_2d.coords)          slug_pk_pt = str(ope.SLUG) + "-" + str(ope.pk) -        self._test_operation(1, slug_pk_pt, geojsons, 'Pt') +        self._test_operation(1, slug_pk_pt, copy.deepcopy(geojsons), 'Pt') +        # display both at the same time (1 is already displayed) +        self._test_operation(2, slug_pk_poly, geojsons, 'Poly') diff --git a/ishtar_common/static/js/ishtar-map.js b/ishtar_common/static/js/ishtar-map.js index ab8096b06..aa7263f7f 100644 --- a/ishtar_common/static/js/ishtar-map.js +++ b/ishtar_common/static/js/ishtar-map.js @@ -558,7 +558,7 @@ var initialize_test_map = function (slug_pk) {      geo_items_features = {};      current_test = true;      if ($("#"+id).length === 0) { -        $("#display-geo-items").after('<div id="'+id+'">Ready!</div>'); +        $("#display-geo-items-for-" + slug_pk).after('<div id="'+id+'">Ready!</div>');      }      $("#"+id).hide();  } diff --git a/ishtar_common/templates/ishtar/blocks/sheet_geo_items.html b/ishtar_common/templates/ishtar/blocks/sheet_geo_items.html index 33b3dc5ed..12e4b4ef0 100644 --- a/ishtar_common/templates/ishtar/blocks/sheet_geo_items.html +++ b/ishtar_common/templates/ishtar/blocks/sheet_geo_items.html @@ -1,7 +1,7 @@  {% load i18n window_field %}{% if PROFILE.mapping %}  {% if geo_item.point_2d or geo_item.multi_polygon %}  <dl class="col-12"> -    <dt id="display-geo-items">{% trans "Display geo items" %}</dt> +    <dt id="display-geo-items-for-{{geo_item.SLUG}}-{{geo_item.pk}}">{% trans "Display geo items" %}</dt>      <dd>          <fieldset>              {% if geo_item.SLUG == "operation" %} diff --git a/ishtar_common/tests.py b/ishtar_common/tests.py index 71242db6b..4283e6c6f 100644 --- a/ishtar_common/tests.py +++ b/ishtar_common/tests.py @@ -3628,8 +3628,23 @@ class SeleniumTests(StaticLiveServerTestCase):              + "window.scrollBy(0, elementTop-(viewPortHeight/2));",              element) +    ''' +    arguments:  +        i is the number of the row (starting at 1) +        target and source are a tuple of french/english slugs corresponding respectively to the slug of the item of  +        which we want some details and the slug of the item from which we launched the search +    ''' +    def click_on_details(self, i, target, source=None): +        table = '//table[contains(@id, ' + target[0] + ') or contains(@id, ' + target[1] + ')]' +        if source: +            table += '[contains(@id, ' + source[0] + ') or contains(@id, ' + source[1] + ')]' +        details = table + '/tbody/' + '/tr[' + str(i) + ']/td/a[@class="display_details"]' +        details = self.selenium.find_element_by_xpath(details) +        self.scroll(details) +        details.click() +      def assertNotInDOM(self, xpath): -        self.selenium.implicitly_wait(5) +        self.selenium.implicitly_wait(3)          try:              self.WebDriverWait(self.selenium, 2).until(                  self.EC.visibility_of_element_located((self.By.XPATH, xpath)) @@ -3642,20 +3657,24 @@ class SeleniumTests(StaticLiveServerTestCase):      def assertMap(self, dic_base, slug_pk, features_collecs=None):          dic_base = {'type': 'FeatureCollection', 'features': [dic_base]} -        mapdivs = self.selenium.find_elements_by_class_name("window-map")          mapid = None -        for mapdiv in mapdivs: -            if slug_pk in mapdiv.get_attribute("id"): -                mapid = mapdiv.get_attribute("id") -                break +        timeout = 20 +        t = time() +        while not mapid and time()-t < timeout: +            mapdivs = self.selenium.find_elements_by_class_name("window-map") +            for mapdiv in mapdivs: +                if slug_pk in mapdiv.get_attribute("id"): +                    mapid = mapdiv.get_attribute("id") +                    break          id = int(re.search(r'\d+$', mapid).group())          # TODO: use the map and not the map_features in the js function          if features_collecs:              self.WebDriverWait(self.selenium, 2).until(                  self.EC.visibility_of_element_located((self.By.ID, "http-geo-items-ready-"+slug_pk))              ) -        print(id) +        print('id : ', id)          print('mapid : ', mapid) +        print('slug_pk : ', slug_pk)          print(self.selenium.execute_script('return base_features_type(arguments[0])', mapid))          base_features, geo_items_feats = self.selenium.execute_script('return get_features_by_id(arguments[0])', mapid)          base_features['features'][0]['properties'].pop('name') @@ -3666,4 +3685,8 @@ class SeleniumTests(StaticLiveServerTestCase):          if features_collecs:              print('feat : ', geo_items_feats)              print('dic : ', features_collecs) -            self.assertEqual(geo_items_feats, features_collecs) +            try: +                self.assertEqual(geo_items_feats, features_collecs) +            except: +                self.selenium.implicitly_wait(10000) +                self.selenium.find_element_by_xpath('doesnet') | 
