js 控制
webdriver可以用來(lái)執(zhí)行javascript代碼,相應(yīng)的方法:execute_script
- 例
#coding=utf-8
import sys
from selenium import webdriver
import time
surl = 'http://www.baidu.com'
kw = sys.argv[1]
print kw
def search(keyword):
driver = webdriver.Firefox()
driver.get(surl)
driver.find_element_by_id('kw').send_keys(keyword)
driver.find_element_by_id('su').click()
return driver
def testjs():
driver = search(kw)
js1 = 'document.documentElement.scrollTop=10000'
js2 = 'document.documentElement.scrollTop=0'
driver.execute_script(js1)
time.sleep(3)
driver.execute_script(js2)
driver.quit()
if __name__ == "__main__":
testjs()
將代碼保存為baiduscroll.py,在命令行中執(zhí)行
python baiduscroll.py selenium查看執(zhí)行結(jié)果
窗口截屏
相應(yīng)方法get_screenshot_as_file()
同樣的,我們直接在上一個(gè)文件中進(jìn)行修改,將誰(shuí)的重命名為sshot.py
#coding=utf-8
import sys
from selenium import webdriver
import time
surl = 'http://www.baidu.com'
kw = sys.argv[1]
print kw
def search(keyword):
driver = webdriver.Firefox()
driver.get(surl)
driver.find_element_by_id('kw').send_keys(keyword)
driver.find_element_by_id('su').click()
driver.get_screenshot_as_file('./shottest.jpg')
return driver
def testjs():
driver = search(kw)
js1 = 'document.documentElement.scrollTop=10000'
js2 = 'document.documentElement.scrollTop=0'
driver.execute_script(js1)
time.sleep(3)
driver.execute_script(js2)
driver.quit()
if __name__ == "__main__":
testjs()
執(zhí)行后可以看到當(dāng)前文件夾下多了一個(gè)shottest.jpg

shottest.jpg
關(guān)閉窗口
相應(yīng)方法quit(),這個(gè)我們?cè)谏厦娴哪_本中已經(jīng)應(yīng)用過(guò)了
關(guān)于屏幕操作
set_window_size() 設(shè)置屏幕大小
maximize_window()全屏
back()后退
forward()前進(jìn)
webdriver的設(shè)計(jì)原理
- WebDriver 是按照 server – client 的經(jīng)典設(shè)計(jì)模式設(shè)計(jì)的。
server 端就是 remote server,可以是任意的瀏覽器。當(dāng)我們的腳本啟動(dòng)瀏覽器后,該瀏覽器就是 remoteserver,它的職責(zé)就是等待 client 發(fā)送請(qǐng)求并做出相應(yīng)。client 端簡(jiǎn)單說(shuō)來(lái)就是我們的測(cè)試代碼,我們測(cè)試代碼中的一些行為,比如打開(kāi)瀏覽器,轉(zhuǎn)跳到特定的 url 等操作是以 http 請(qǐng)求的方式發(fā)送給被 測(cè)試瀏覽器,也就是 remote server;remote server 接受請(qǐng)求,并執(zhí)行相應(yīng)操作,并在 response 中返回執(zhí)行狀態(tài)、返回值等信息。
webdriver工作流程
- webdriver啟動(dòng)目標(biāo)瀏覽器,并綁定到指定端口,該啟動(dòng)的瀏覽器實(shí)例,做為webdriver的remoteserver。
- client端通過(guò)commandExcuter發(fā)送HTTPRequest經(jīng)remoteserver的偵聽(tīng)端口(協(xié)議:the webdriver wire protocol)
- Remote server 需要依賴原生的瀏覽器組件(如:IEDriverServer.exe、chromedriver.exe),來(lái)轉(zhuǎn)化轉(zhuǎn)化瀏覽器的 native 調(diào)用。