我尝试使用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脚本而没有标记。
请告知我如何处理这些元素?
答案 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()