自动化测试中对js的处理

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)

原文发布于微信公众号 - Python自动化测试(wuya-python)

原文发表时间:2015-07-30

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏守候书阁

vue组件开发练习--焦点图切换

vue用了有一段时间了,开发的后台管理系统也趋于完善,现在时间比较算是有点空闲吧!这个空闲时间我在研究vue的另外的一些玩法,比如组件,插件等。今天,我就分享一...

2061
来自专栏娱乐心理测试

移动端图标生成工具

1160
来自专栏V站

javascript实现background 定时循环随机背景图

这里用的固定地址,用的新浪图床,喜欢的话可以自己扩充图片,我这里简短的展示了10个图片!

1513
来自专栏Material Design组件

Material Design — Navigation drawerStandard drawer Modal drawer Bottom drawer

2374
来自专栏极乐技术社区

『教程』微信小程序--图片相关问题合辑

最近有注意到,很多同学在社区求助图片上传、加载、效果处理等相关的问题,这期专程做这样一个汇总供大家学习参考。 图片上传相关文章 微信小程序多张图片上传功能 微信...

99610
来自专栏向治洪

React Native ios开发第一课

前言 本篇文章的作用在于帮助你快速上手使用React Native编写iOS应用。如果你现在还不太了解React Native是什么以及Facebook为什么...

2118
来自专栏散尽浮华

Html之初体验

概述 HTML是英文Hyper Text Mark-up Language(超文本标记语言)的缩写,他是一种制作万维网页面标准语言。相当于定义统一的一套规则,大...

22510
来自专栏快乐八哥

使用jQuery的animate方法制作滑动菜单

周末看Ziv小威的博客《制作滑动条菜单,如何延时处理滑动效果,避免动画卡顿》,参见地址:http://www.cnblogs.com/zivxiaowei/p/...

2299
来自专栏小樱的经验随笔

【全网最全的博客美化系列教程】06.推荐和反对炫酷样式的实现

这个样式相信大家早已不陌生了,有关这个样式的实现估计很多人不太清楚,下面让我带大家来学习一下这个样式的实现~

1114
来自专栏iKcamp

React 深入系列2:组件分类

文:徐超,《React进阶之路》作者 授权发布,转载请注明作者及出处 ---- React 深入系列2:组件分类 React 深入系列,深入讲解了...

3895

扫码关注云+社区