【问题标题】:find_element_by_id is not able to locate the elementsfind_element_by_id 无法找到元素
【发布时间】:2015-07-28 09:35:18
【问题描述】:

我正在使用 Selenium 开发 Python,并使用以下命令 driver = webdriver.Firefox() 创建了一个 Web 驱动程序实例,并且该 Web 驱动程序实例已正确创建。

在此之后,我尝试通过以下方式获取具有 id 的元素:str_title = driver.find_element_by_id("banner-section-title")。但我收到以下错误:

NoSuchElementException: Message: Unable to locate element: {"method":"id","selector":"banner-section-title"}
Stacktrace:
    at FirefoxDriver.prototype.findElementInternal_ (file:///tmp/tmpR0IR8T/extensions/fxdriver@googlecode.com/components/driver-component.js:10299)
    at FirefoxDriver.prototype.findElement (file:///tmp/tmpR0IR8T/extensions/fxdriver@googlecode.com/components/driver-component.js:10308)
    at DelayedCommand.prototype.executeInternal_/h (file:///tmp/tmpR0IR8T/extensions/fxdriver@googlecode.com/components/command-processor.js:12282)
    at DelayedCommand.prototype.executeInternal_ (file:///tmp/tmpR0IR8T/extensions/fxdriver@googlecode.com/components/command-processor.js:12287)
    at DelayedCommand.prototype.execute/< (file:///tmp/tmpR0IR8T/extensions/fxdriver@googlecode.com/components/command-processor.js:12229)

【问题讨论】:

  • 你确定页面上存在id='banner-section-title'的元素吗?
  • 是的,它存在,当我尝试使用“Click Link id=banner-section-title”从我的测试用例中单击链接时,它工作正常。但是当我试图从 .py 文件的关键字文件中做同样的事情时,我得到了上述错误

标签: python selenium-webdriver robotframework selenium-firefoxdriver


【解决方案1】:

首先,您必须确定您正在寻找的“id”。 根据您发布的错误,似乎找不到该元素。

所以你也可以尝试使用

driver.implicitly_wait(<seconds>) 

WebDriverWait(self.driver, 10).until(lambda s: s.find_element_by_id(<element>).is_displayed())

试试这个 从 selenium.webdriver.support.ui 导入 WebDriverWait 从 selenium.webdriver.common.keys 导入密钥

page="www.yourwebsite.com"
self.driver = webdriver.Firefox()
driver = self.driver
driver.get(page)
buffer = self.driver.find_element_by_id("foo")

然后,如果有一个按钮,您可以添加 .send_keys(Keys.RETURN) (这是我的登录表单示例)

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.keys import Keys

    username="myUserName"
    password="myPassword"
    WebDriverWait(self.driver, 10).until(lambda s: s.find_element_by_id("username").is_displayed()
    textUserName = self.driver.find_element_by_id("username")
    textUserName.send_keys(userName)
    WebDriverWait(self.driver, 10).until(lambda s: s.find_element_by_id("password").is_displayed()
    textPassword = self.driver.find_element_by_id("password")
    textPassword.clear()
    textPassword.send_keys(password)
    btnLogin =  self.driver.find_element_by_xpath("//input[@value='Login']")
    btnLogin.send_keys(Keys.RETURN)

希望对你有帮助

【讨论】:

  • 给定的代码工作正常......但在创建 web 实例之前,我只使用 Open Browser 关键字打开我的 url。所以我不需要在创建 Web 实例后打开 url。有没有其他方法可以在没有包括 driver.get(page) 的情况下工作并使元素识别
  • 如果你不打开 url 就无法验证其中的内容,因此检查网页内容的唯一方法是使用 driver.get(page) 打开它
猜你喜欢
  • 1970-01-01
  • 2020-06-14
  • 2015-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-01
  • 2022-07-05
  • 2018-03-31
相关资源
最近更新 更多