今天跟大家分享的是如何高效的定位iframe。我們來看一段最早的代碼:
# coding: utf-8from selenium import webdriverfrom time import sleepdriver = webdriver.Firefox()driver.get("http://blog.hexun.com/")driver.find_element_by_id("read_btn").click()driver.maximize_window()sleep(3)driver.find_element_by_id("username").send_keys("賬号")driver.find_element_by_id("password").send_keys("密碼")driver.find_element_by_xpath(".//*[@id='login12']/div/div/div/div[3]/input").click()sleep(3)# 點選發送部落格driver.find_element_by_xpath(".//*[@id='login12']/div/div/div[3]/a[1]").click()sleep(3)curr = driver.current_window_handleall_curr = driver.window_handlesfor i in all_curr: if i != curr: driver.switch_to.window(i) sleep(2) driver.find_element_by_id("hxjy_blog_tit").send_keys(u"我的文章") driver.switch_to.frame(driver.find_element_by_xpath(".//*[@id='editorContainer']/iframe")) sleep(2) driver.find_element_by_xpath("html/body").click() driver.find_element_by_xpath("html/body").send_keys(u"童林") driver.switch_to.default_content() # 頁面下拉 js = "var q=document.documentElement.scrollTop=1000" driver.execute_script(js) driver.find_element_by_xpath(".//*[@id='hxjy_blog_label']").send_keys(u"測試") driver.find_element_by_xpath(".//*[@id='postarticle']").click()
這是一篇關于selenium的代碼,現在就拿這段代碼舉例子:
1、如何辨識是不是iframe
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicmbw5COwY2N2ETZ3QjY5UzYxQmZwYWOzITN1QzMkRDMiRTZx8CX0JXZ252bj91Ztl2Lc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
我們用箭頭所指工具點選要檢視的元素後,在FirePath頁籤下,方框所示的位置會有"iframe.editor"或者"iframe"的提示,這時候我們就可以确定——這是一個iframe。
2、定位iframe
這個我覺得有點麻煩,不知道各位大神怎麼定位,我說一下我的思路,大家可以參考。由于一點編輯框就進入iframe,導緻我不知道怎麼定位這個iframe的位置,于是我選擇定位這個iframe上面的元素,也就是定位下圖方框那裡,然後看下面的元素,點開div标簽,在裡面找iframe,友善的是滑鼠移動到标簽上時頁面會有顯示對應的位置:
上圖我們看到了iframe,然後把滑鼠放到iframe上,右鍵選擇copy xpath:
這樣我們就定位到了iframe的位置。
定位到了以後,我們要轉移到iframe上,pycharm裡提示的方法是switch_to_frame(),但是這個方法已經過時了,如果你用這個方法,pycharm會劃線提醒你,最新的方法是switch_to.frame(),傳的參數就是iframe的定位也就是代碼裡黑色那句:
driver.switch_to.frame(driver.find_element_by_xpath(".//*[@id='editorContainer']/iframe"))
現在我們進入了iframe,接下來正常進行定位、輸入内容就可以了(看代碼)
進入了iframe以後就像進入了一個盒子,盒子裡面的東西可以找到,可是盒子外面的東西是找不到的。是以當我們操作完成,繼續定位發現下圖方框處變成Top Window時,證明這已經不是iframe,我們需要跳出盒子了
一句話就能跳出來,就像有的人和你說“我已經放下了”就離開你一樣,哈哈,你也可以這麼潇灑的對不愛你的人說。
也是一句話,就是最上面代碼中的黑色斜體字:
driver.switch_to.default_content()
這樣就跳出iframe了。好多登入框、文章輸入框都是iframe寫的,現在對你來說應該已經不難了,大家快試試吧。
如果對接口、性能、自動化測試、面試經驗交流等感興趣的,可以關注我的頭條号,我會不定期的發放免費的資料,這些資料都是從各個技術網站搜集、整理出來的,如果你有好的學習資料可以私聊發我,我會注明出處之後分享給大家。歡迎分享,歡迎評論,歡迎轉發。需要資料的同學可以關注小編+轉發文章+私信【測試資料】