为什么我在selenium中找不到带占位符的输入元素?

时间:2017-09-14 07:48:15

标签: python selenium

在网页中,我有以下元素:

<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"));

那么为什么现在不能正常工作?

1 个答案:

答案 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