He is my sample snippet. i want to click the button-1034-btnIconEl using python selenium.
i tried this
driver.switch_to.frame(1)
driver.find_element(By.XPATH, "//span[contains(@id,'button-1034-btnIconEl')]").click()
but getting
"NoSuchElementException: no such element:"
Please help me to traverse this.
解决方案
To click() on the button with id as button-1034-btnIconEl as the the desired element is within an so you have to:
Induce WebDriverWait for the desired frame to be available and switch to it.
Induce WebDriverWait for the desired element to be clickable.
You can use either of the following Locator Strategies:
Using CSS_SELECTOR:
WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.CSS_SELECTOR,"iframe.x-component.x-fit-item.x-component-default[id^='rpIFrame-']")))
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "a > span > span[id^='button'][id$='btnIconEl']"))).click()
Using XPATH:
WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.XPATH,"//iframe[@class='x-component x-fit-item x-component-default' and starts-with(@id, 'rpIFrame-')]")))
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "//a/span/span[starts-with(@id, 'button') and contains(@id, 'btnIconEl')]"))).click()
Here you can find a relevant discussion on Ways to deal with #document under iframe