webdriver定位frame内元素_以163邮箱登录为例

一、frame和iframe区别
  Frame与Iframe两者可以实现的功能基本相同,不过Iframe比Frame具有更多的灵活性。frame是整个页面的框架,iframe是内嵌的网页元素,也可以说是内嵌的框架。
  Iframe标记又叫浮动帧标记,可以用它将一个HTML文档嵌入在一个HTML中显示。它和Frame标记的最大区别是在网页中嵌入的<Iframe></Iframe>所包含的内容与整个页面是一个整体,而<Frame></Frame>所包含的内容是一个独立的个体,是可以独立显示的。另外,应用Iframe还可以在同一个页面中多次显示同一内容,而不必重复这段内容的代码。

二、163登录界面

  1.打开http://mail.163.com登录页面
  2.用firebug定位登录框
  3.鼠标停留在左下角(定位到iframe位置)时,右上角整个登录框显示灰色,说明iframe区域是整个登陆框域

  4.iframe的ID也是随机生成
  关于怎么查找当前页面iframe可借助Try XPath,相关介绍:《元素定位工具:Try XPath》

三、定位frame的几种方式
  driver.switchTo.frame(0) #用frame的index来定位,第一个是0
  driver.switchTo.frame("frame_id") #用id来定位
  driver.switchTo().frame("frame_name") #用name来定位
  driver.switchTo().frame(driver.findElement(By.tagName("ifram"))) #用WebElement来定位
  driver.switchTo().parentFrame() #跳转到父级iframe
  driver.switchTo().defaultContend() #跳转到默认iframe
  以上是java语法下的方法调用,思路可套用到其他语言中去

四、解决方案
  1.使用switch_to.frame(index)切换到frame下

from selenium import webdriver

driver = webdriver.Firefox()

driver.get("https://mail.163.com/")
driver.switch_to.frame(2)
driver.find_element_by_xpath("//input[@data-loginname='loginEmail']").clear()
driver.find_element_by_xpath("//input[@data-loginname='loginEmail']").send_keys("user_name")
driver.find_element_by_xpath("//input[@class='j-inputtext dlpwd']").clear()
driver.find_element_by_xpath("//input[@class='j-inputtext dlpwd']").send_keys("password")
driver.find_element_by_xpath("//a[@id='dologin']").click()
driver.quit()

  2.使用WebElement来定位

原文地址:https://www.cnblogs.com/susanhonly/p/10762307.html