在网页中,我有以下元素:
<input placeholder="Search in your collabs" class="md-input" type="text">
我尝试通过以下代码(在python
中)选择:
elem = browser.find_element_by_xpath("//input[@placeholder='Search in your collabs']")
但是在运行代码时出现以下错误:
NoSuchElementException: Message: Unable to locate element: //input[@placeholder='Search in your collabs']
我正在寻找的元素位于我之前选择的iframe中(之前我使用其他一些属性做了另一个find_element_by_xpath
)。详细地说,我之前做的是:
browser.switch_to_frame(browser.find_element_by_id("clb-iframe-workspace"));
那么为什么现在不能正常工作?
答案 0 :(得分:1)
使用sleep
(在您的评论中表示)是一个糟糕的解决方案,因为它不可避免地会降低您的测试执行速度并且可能每天都会失败。更好的解决方案是使用超时。超时等待达到指定的时间跨度,但会尽快继续(即您的预期条件已满足)。
您应该增加隐含等待超时以查找元素,或者使用显式等待,例如
from selenium.webdriver.support import expected_conditions as expect
....
//wait up to 120sec, poll every sec
elem = WebDriverWait(browser, 120, 1).until(
expect.visibility_of_element_located(
(By.XPATH, "//input[@placeholder='Search in your collabs']")))
解释here