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") |
某些时候,由于页面显示的数据比较多,是已瀑布流的形式显示,但是我们需要点击底部的对象,我们就需要把鼠标移动到底部,才可以点击对象,如在百度首页输入搜索关键字,点击搜索后,然后浏览器鼠标移动到底部,见如下实现这样一个效果的测试代码:
#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)
移动鼠标到浏览器底部和顶部,一个是浏览器的最底部,一个是浏览器的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)
在视频网站中,怎么可以实现对视频进行自动化的控制播放和暂停了?我们可以利用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)