硒无法找到我的元素(按钮)

时间:2019-02-05 06:56:14

标签: python selenium selenium-webdriver xpath css-selectors

我想使用硒来按下按钮,昨天我遇到了一个问题,我无法这样做,只是发现我的按钮位于环绕整个网页的iframe中。这样就解决了:

from time import sleep
driver.switch_to.frame(driver.find_element_by_id("includedPage"))
sleep(10)
element = driver.find_element_by_xpath("//input[contains(@id, 'workbenchLst:j_id_id507') and @value='Add']")
element.click()

点击它之后,我想对页面上的其他按钮做同样的操作,但是我不能一直为该iframe和页面中的所有其他元素获取Unable to locate element(该页面内部也有一个iframe)这样的td):

<td id="rightTdId">                                 
                                    <iframe id="includedPage" style="width:100%;" onload="reRenderReportLOV();;tickleSession('pageNavigation:sessionLink');disableContextMenu();showHidPanelMenu('hide','leftMenuj_id_1');" name="includedPage" src=".." marginheight="0" marginwidth="0" height="531" frameborder="0"></iframe>
                                </td>

定位后,如何在该页面上获取按钮并禁用iframe的效果?

2 个答案:

答案 0 :(得分:1)

如果两个按钮都属于不同的iframe,则必须将Web驱动程序的焦点切换到父级,然后再次将其切换到第二个iframe。像这样:

driver.switch_to.frame(driver.find_element_by_id("includedPage"))
sleep(10)
element = driver.find_element_by_xpath("//input[contains(@id, 'workbenchLst:j_id_id507') and @value='Add']")
element.click()

driver.switch_to.default_content()  

driver.switch_to.frame(driver.find_element_by_id("id of different iframe"))

element2 = driver.find_element_by_xpath(" xpath of 2nd button")
element2.click()

答案 1 :(得分:0)

单击iframe后,需要返回上一帧或默认帧,则应使用driver.switch_to.default_content(),然后可以单击默认内容上的按钮。

这会将上下文切换到默认框架,您将能够再次对其进行操作。