0

我正在使用Python和Selenium一起工作,并且使用以下命令创建了一个Web驱动程序实例driver = webdriver.Firefox()并正确创建了Web驱动程序实例。find_element_by_id无法找到元素

在此之后,我试图通过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/[email protected]/components/driver-component.js:10299) 
    at FirefoxDriver.prototype.findElement (file:///tmp/tmpR0IR8T/extensions/[email protected]/components/driver-component.js:10308) 
    at DelayedCommand.prototype.executeInternal_/h (file:///tmp/tmpR0IR8T/extensions/[email protected]/components/command-processor.js:12282) 
    at DelayedCommand.prototype.executeInternal_ (file:///tmp/tmpR0IR8T/extensions/[email protected]/components/command-processor.js:12287) 
    at DelayedCommand.prototype.execute/< (file:///tmp/tmpR0IR8T/extensions/[email protected]/components/command-processor.js:12229) 
+0

确实有'ID =“的旗帜形部标题元素''存在于页面上? –

+0

是的,它是存在的,当我试图点击链接从我的测试用例使用“点击链接id =横幅部分标题”它工作正常。但是,当我试图从关键字文件,从.py文件做同样的事情,我得到了上述错误 – Madhuri

回答

2

首先,您必须确定您正在查找的'id'。 由您发布的错误似乎未找到该元素。

所以你可以尝试也使用

driver.implicitly_wait(<seconds>) 

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

试试这个 从selenium.webdriver.support.ui进口从selenium.webdriver.common.keys进口WebDriverWait Keys

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

那么,如果有ab utton您可以添加.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) 

我希望这能帮助

+0

非常感谢它现在工作正常... – Madhuri

+0

给定的代码工作正常......但在创建web instanc只有我打开我的网址使用Open Browser关键字。所以我不需要在web实例创建后打开url。是否有任何其他方式来处理withoiut包括driver.get(页),并使元素标识 – Madhuri

+0

如果你不打开网址,你无法验证内容,所以检查网页中的内容的唯一方法是打开它与driver.get(页面) – ClaudioM