Dear guys, as a QA automation engineer, I have to deal with a lot of UI tests using Selenium.
One thing annoy me is that sometimes, when trying to click or get attribute from element, I usually get selenium exception error.
Before today, I already knew that I can use excute script in Selenium to perform using Javascript query. But it's not enough. Sometimes I still can't click on the targeted button.
So the 1 tip I got from today is using Chrome Developer tool.
I wil show you the example below.
This page has a lot of shadow DOM element so we have to use javascript to interact with them.
First go to the coccoc://settings/languages site (you can change to chrome://settings if you want)
We will deal with the spell checker button, try to click on that.
Next right click on the element choose copy - JS path:
Now you can click on that check box using element.click in javascript
The result will be : check box is clicked.
To perform it in Python it will be like :
// BasePage Element for define how to deal with shadow root element class BasePageElement(object): @staticmethod def select_shadow_element_by_css_selector(browser, selector): element = browser.execute_script('return arguments[0].shadowRoot', selector) return element def find_shadow_element(self, driver, *string_text): wait = WebDriverWait(driver, 20) i = 0 root = wait.until(ec.presence_of_element_located((By.TAG_NAME, string_text[i]))) # root = driver.find_element_by_tag_name(string_text[i]) while len(string_text) > (i+1): i = i+1 shadow_root = self.select_shadow_element_by_css_selector(driver, root) root = shadow_root.find_element_by_css_selector(string_text[i]) return root // Find element using shadow root class CocCocSettingsElements(BasePageElement): def find_settings_toggle_button(self, driver): return self.find_shadow_element(driver, 'body > settings-ui', '#main', 'settings-basic-page', '#basicPage > settings-section:nth-child(6) > settings-languages-page', '#pages > div > settings-checkbox-toggle', '#checkbox') // Click on the element in page object class class SettingsPageObject: coccoc_settings_elements = CocCocSettingsElements() def choose_spell_checker(self, driver): element_outside = self.coccoc_settings_elements.find_settings_toggle_button(driver) driver.execute_script("arguments[0].click()", element_outside) // Implement the test class TestSettingsCocCoc: settings_page_object = SettingsPageObject() def test_login_testrail_success(self): driver = webdriver.Chrome() driver.maximize_window() try: driver.get(CocCocSettingsUrls.SETTINGS_LANGUAGES) time.sleep(2) self.settings_page_object.choose_spell_checker(driver) finally: driver.quit()
Ta da!!!
For any questions or you want to get the example code, feel free to comment below.
Top comments (2)
awesome, it's never been easiear :D
Thank you!
Glad that could help you :-*