如何通过JS脚本创建的Selenium获取元素

时间:2015-09-19 11:03:06

标签: python selenium selenium-webdriver web-testing

我尝试使用Selenium(python绑定)自动化测试,特别想登录tokmonet.zendesk.com。
我创建了一个脚本,它通过id获取电子邮件字段,密码字段和登录按钮 但是当我运行脚本时,它失败了

selenium.common.exceptions.NoSuchElementException: Message: Unable to locate element: {"method":"id","selector":"user_email"}  

使用Firebug检查页面我看到了这些元素。但是当试图用Firefinder来获取它时,它无法实现。 所以,我执行

html_source = driver.page_source  
print(html_source)

并获得唯一的

<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body></body></html>

当我检查页面源时,它只包含js脚本而没有标记。

请告知我如何处理这些元素?

2 个答案:

答案 0 :(得分:2)

我看到您尝试登录的元素位于tokmonet.zendesk.com的iframe中,因此您无法获取元素。要处理这种情况,请先尝试切换到iframe然后获取元素。以下是如何在Java中实现它 -

driver.switchTo().frame(driver.findElement(By.tagName("iframe")));
(new WebDriverWait(driver, 20))
          .until(ExpectedConditions.presenceOfElementLocated(By.id("user_email"))).sendKeys("username");
//Similarly you can get other elements too

您也可以用其他语言实现它。希望这会有所帮助。

答案 1 :(得分:1)

您需要切换到IFRAME,然后send_keys()到您可以通过ID找到的元素。如果您需要访问IFRAME之外的元素,请不要忘记切换回默认内容。

driver.switch_to.frame(driver.find_element_by_tag_name("iframe"))
driver.find_element_by_id("user_email").send_keys("username")
driver.find_element_by_id("user_password").send_keys("password")
// do whatever else
driver.switch_to.default_content()