1 js的處理
在自動化測試中,某些問題無法解決,我們可以執行javascript代碼通過seleniumwebdriver的使用方法來解決我們遇到的問題,如瀏覽器顯示的內容很多,但是要定位底部或者頂部的,就得控制瀏覽器滾動條來實現,webdriver可以通過execute_script()來調用js來實現。WebDriver類提供了下列方法來執行Javascript代碼:
方法 | 描述 | Example |
---|---|---|
Execute_async_script(script) | 執行javascript在當前的窗框 | Driver.execute_async_script("return document.title") |
Execute_script(script) | 同步執行javascript早當前的窗框 | Driver.execute_script("return document.title") |
1.1瀏覽器底部
某些時候,由於頁面顯示的數據比較多,是已瀑布流的形式顯示,但是我們需要點擊底部的對象,我們就需要把鼠標移動到底部,纔可以點擊對象,如在百度首頁輸入搜索關鍵字,點擊搜索後,然後瀏覽器鼠標移動到底部,見如下實現這樣一個效果的測試代碼:
#coding:utf-8
fromselenium import webdriver
fromselenium.webdriver.common.by import By
fromselenium.webdriver.support.ui import WebDriverWait
fromselenium.webdriver.support import expected_conditions
fromselenium.webdriver.common.action_chains import ActionChains
fromselenium.webdriver.common.keys import Keys
importunittest
fromtime import sleep
classdemoTest(unittest.TestCase):
def setUp(self):
self.driver=webdriver.Firefox()
self.driver.maximize_window()
self.driver.implicitly_wait(30)
self.driver.get('http://www.baidu.com')
def testDemo(self):
self.driver.find_element_by_id('kw').send_keys('webdriver')
self.driver.find_element_by_id('su').click()
js="varq=document.documentElement.scrollTop=10000"
self.driver.execute_script(js)
sleep(3)
def tearDown(self):
self.driver.quit()
if__name__=='__main__':
unittest.main(verbosity=2)
1.2瀏覽器頂部
移動鼠標到瀏覽器底部和頂部,一個是瀏覽器的最底部,一個是瀏覽器的top,瀏覽器到頂部,任然已百度搜索爲實例,先移動到底部嗎,再移動到頂部。見如下的測試代碼:
#coding:utf-8
fromselenium import webdriver
fromselenium.webdriver.common.by import By
fromselenium.webdriver.support.ui import WebDriverWait
fromselenium.webdriver.support import expected_conditions
fromselenium.webdriver.common.action_chains import ActionChains
fromselenium.webdriver.common.keys import Keys
importunittest
fromtime import sleep
classdemoTest(unittest.TestCase):
def setUp(self):
self.driver=webdriver.Firefox()
self.driver.maximize_window()
self.driver.implicitly_wait(30)
self.driver.get('http://www.baidu.com')
def testDemo(self):
self.driver.find_element_by_id('kw').send_keys('webdriver')
self.driver.find_element_by_id('su').click()
#瀏覽器移動到底部
js="varq=document.documentElement.scrollTop=10000"
self.driver.execute_script(js)
sleep(3)
#鼠標移動瀏覽器到頂部
js1="varq=document.documentElement.scrollTop=0"
self.driver.execute_script(js1)
sleep(3)
def tearDown(self):
self.driver.quit()
if__name__=='__main__':
unittest.main(verbosity=2)
1.3對視頻的控制
在視頻網站中,怎麼可以實現對視頻進行自動化的控制播放和暫停了?我們可以利用html5中的video元素來實現,<video>標籤是定義視頻,比如電影片或者其他視頻流。對於自動化的控制視頻的播放,暫停,我們通過獲取<video>元素,獲取到它的ID,然後獲取視頻的播放源進行確認,最後通過js控制視頻的播放,暫停。我們已http://www.videojs.com/爲實例說明,打開鏈接地址後,就會看到一個視頻,我們看視頻的源碼,源碼見如下:
<video id="home_video_html5_api" class="vjs-tech" poster="/img/poster.jpg" preload="none">
<source type="video/mp4" src="http://vjs.zencdn.net/v/oceans.mp4"></source>
<source type="video/webm" src="http://vjs.zencdn.net/v/oceans.webm"></source>
</video>
依據如上的html代碼,我們可以得到<video>的id="home_video_html5_api",如下測試代碼演示了實現對視頻自動化的控制播放和暫停,見代碼:
#coding:utf-8
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support importexpected_conditions
from selenium.webdriver.common.action_chains importActionChains
from selenium.webdriver.common.keys import Keys
import unittest
from time import sleep
class demoTest(unittest.TestCase):
def setUp(self):
self.driver=webdriver.Firefox()
self.driver.maximize_window()
self.driver.implicitly_wait(30)
self.driver.get('http://www.videojs.com/')
deftestDemo(self):
video=self.driver.find_element_by_id('home_video_html5_api')
#視頻源
js="returnarguments[0].currentSrc"
self.driver.execute_script(js,video)
#視頻的播放
self.driver.execute_script("returnarguments[0].play()",video)
sleep(10)
#視頻的暫停
self.driver.execute_script("arguments[0].pause()",video)
sleep(10)
deftearDown(self):
self.driver.quit()
if __name__=='__main__':
unittest.main(verbosity=2)