From 2697dbb5f9048d6744e7fb1779244fcf503c487b Mon Sep 17 00:00:00 2001 From: leandro-monteiro_totvs Date: Wed, 4 Mar 2026 11:18:47 -0300 Subject: [PATCH 1/5] fix method name --- tir/technologies/webapp_internal.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tir/technologies/webapp_internal.py b/tir/technologies/webapp_internal.py index acc0b7d2..f6cfec41 100644 --- a/tir/technologies/webapp_internal.py +++ b/tir/technologies/webapp_internal.py @@ -2285,7 +2285,7 @@ def check_input_radio(self, element): return True if 'selected' in element.get_attribute('class') else False - def search_browse_bcolumn(self, search_column, search_elements, index=False): + def search_browse_column(self, search_column, search_elements, index=False): """ [Internal] From 163044242c14e561327ccf78817284812cabda4d Mon Sep 17 00:00:00 2001 From: LEANDRO L MONTEIRO <60761500+98llm@users.noreply.github.com> Date: Wed, 4 Mar 2026 11:22:49 -0300 Subject: [PATCH 2/5] Update version.py --- tir/version.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tir/version.py b/tir/version.py index 2baf9e70..383d60b4 100644 --- a/tir/version.py +++ b/tir/version.py @@ -1 +1 @@ -__version__ = '2.6.0rc12' +__version__ = '2.6.0rc13' From 9766f0f05eeb91aea7aefab3b8ae07de38ace005 Mon Sep 17 00:00:00 2001 From: LEANDRO L MONTEIRO <60761500+98llm@users.noreply.github.com> Date: Wed, 4 Mar 2026 11:22:59 -0300 Subject: [PATCH 3/5] Update install_package.cmd --- scripts/install_package.cmd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/install_package.cmd b/scripts/install_package.cmd index e94c445c..44066de7 100644 --- a/scripts/install_package.cmd +++ b/scripts/install_package.cmd @@ -13,5 +13,5 @@ taskkill /f /im chromedriver.exe echo ------------------------- echo Installing project... echo ------------------------- -pip install -U dist/tir_framework-2.6.0rc12.tar.gz +pip install -U dist/tir_framework-2.6.0rc13.tar.gz pause >nul | set/p = Press any key to exit ... From 5d8f2f3008db1cdb93947c3edd8466569881d719 Mon Sep 17 00:00:00 2001 From: leandro-monteiro_totvs Date: Wed, 4 Mar 2026 16:20:37 -0300 Subject: [PATCH 4/5] fix method and update --- tir/technologies/webapp_internal.py | 64 ++++++++++------------------- 1 file changed, 22 insertions(+), 42 deletions(-) diff --git a/tir/technologies/webapp_internal.py b/tir/technologies/webapp_internal.py index f6cfec41..8dd786f4 100644 --- a/tir/technologies/webapp_internal.py +++ b/tir/technologies/webapp_internal.py @@ -2305,69 +2305,49 @@ def search_browse_column(self, search_column, search_elements, index=False): >>> # Calling the method: >>> self.search_browse_key("Filial*", search_elements) """ - if self.webapp_shadowroot(): - main_container = 'wa-dialog' - menupopup = 'wa-menu-popup.dict-tmenu' - checkbox_term = "wa-checkbox" - else: - main_container = '.tmodaldialog,.ui-dialog' - menupopup = '.tmenupopup.activationOwner' - checkbox_term = "span" - + main_container = 'wa-dialog' + menupopup = 'wa-menu-popup.dict-tmenu' + checkbox_term = "wa-checkbox" if index and not isinstance(search_column, int): self.log_error("If index parameter is True, column must be a number!") - sel_browse_column = lambda: self.driver.find_element(By.XPATH, xpath_soup(search_elements[0])) + + sel_browse_column = lambda: self.soup_to_selenium(search_elements[0]) + self.wait_element(term="[style*='fwskin_seekbar_ico']", scrap_type=enum.ScrapType.CSS_SELECTOR, main_container=main_container) self.wait_until_to( expected_condition = "element_to_be_clickable", element = search_elements[0], locator = By.XPATH) + self.set_element_focus(sel_browse_column()) self.click(sel_browse_column()) - if self.driver.execute_script("return app.VERSION").split('-')[0] >= "4.6.4": - self.tmenu_out_iframe = True - - self.wait_element_timeout(menupopup, scrap_type=enum.ScrapType.CSS_SELECTOR, timeout=5.0, step=0.1, presence=True, position=0) + self.wait_element_timeout(menupopup, scrap_type=enum.ScrapType.CSS_SELECTOR, timeout=5.0, presence=True, position=0, main_container='body') tmenupopup = next(iter(self.web_scrap(menupopup, scrap_type=enum.ScrapType.CSS_SELECTOR, main_container = "body")), None) if not tmenupopup: - if self.driver.execute_script("return app.VERSION").split('-')[0] >= "4.6.4": - self.tmenu_out_iframe = False self.log_error("SearchBrowse - Column: couldn't find the new menupopup") - if self.webapp_shadowroot(): - div_columns = tmenupopup.select('.dict-tfolder')[0] - column_button = self.find_child_element('wa-tab-button', div_columns)[1] - else: - column_button = self.soup_to_selenium(tmenupopup.select('a')[1]) - - self.click(column_button) + div_columns = tmenupopup.select_one('.dict-tfolder') + if div_columns: + column_button = div_columns.select('wa-tab-button') + if column_button: + sel_column_button = self.soup_to_selenium(column_button[-1]) + self.click(sel_column_button) + else: + self.log_error("SearchBrowse - Column: couldn't find tab buttons in the columns folder") spans = tmenupopup.select(checkbox_term) + spans_not_hidden = list(filter(lambda x: 'hidden' not in x.attrs, spans)) if ',' in search_column: search_column_itens = search_column.split(',') - filtered_column_itens = list(map(lambda x: x.strip(), search_column_itens)) + filtered_column_itens = [x.strip() for x in search_column_itens] for item in filtered_column_itens: - if self.webapp_shadowroot(): - span = next(iter(list(filter(lambda x: x.attrs['caption'].lower().replace(" ","") == item.lower().replace(" ",""), spans))), None) - self.send_action(action=self.click, element=lambda: self.soup_to_selenium(span), click_type=3) - else: - span = next(iter(list(filter(lambda x: x.text.lower().strip() == item.lower(),spans))), None) - if not span: - span = next(iter(list(filter(lambda x: x.text.lower().replace(" ","") == search_column.lower().replace(" ","") ,spans))), None) - self.click(self.soup_to_selenium(span)) - else: - if self.webapp_shadowroot(): - span = next(iter(list(filter(lambda x: x.attrs['caption'].lower().replace(" ","") == search_column.lower().replace(" ","") ,spans))), None) + span = next(iter(list(filter(lambda x: x.attrs['caption'].lower().replace(" ","") == item.lower().replace(" ",""), spans_not_hidden))), None) self.send_action(action=self.click, element=lambda: self.soup_to_selenium(span), click_type=3) - else: - span = next(iter(list(filter(lambda x: x.text.lower().strip() == search_column.lower().strip() ,spans))), None) - if not span: - span = next(iter(list(filter(lambda x: x.text.lower().replace(" ","") == search_column.lower().replace(" ","") ,spans))), None) - self.click(self.soup_to_selenium(span)) + else: + span = next(iter(list(filter(lambda x: x.attrs['caption'].lower().replace(" ","") == search_column.lower().replace(" ","") ,spans_not_hidden))), None) + self.send_action(action=self.click, element=lambda: self.soup_to_selenium(span), click_type=3) - if self.driver.execute_script("return app.VERSION").split('-')[0] >= "4.6.4": - self.tmenu_out_iframe = False def fill_search_browse(self, term, search_elements): From 00d95b7c4b6086157954d0811a9ba5fe1519c6c7 Mon Sep 17 00:00:00 2001 From: leandro-monteiro_totvs Date: Fri, 6 Mar 2026 15:09:53 -0300 Subject: [PATCH 5/5] ensure click --- tir/technologies/webapp_internal.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/tir/technologies/webapp_internal.py b/tir/technologies/webapp_internal.py index acc0b7d2..6941820c 100644 --- a/tir/technologies/webapp_internal.py +++ b/tir/technologies/webapp_internal.py @@ -2431,6 +2431,9 @@ def fill_search_browse(self, term, search_elements): self.log_error(f"Couldn't search f{search_elements} current value is {current_value.rstrip()}") self.send_keys(sel_browse_input(), Keys.ENTER) self.wait_blocker() + # ensure click on search icon + self.double_click(sel_browse_icon(), click_type=enum.ClickType.JS) + time.sleep(0.5) self.double_click(sel_browse_icon(), click_type=enum.ClickType.JS) return True