专栏首页Python自动化测试自动化测试中对js的处理

自动化测试中对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),作者:无涯

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

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

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Selenum获取招聘数据

    在这里,Selenium结合lxml来获取51job招聘网站西安地区自动化测试招聘的公司名称,薪资范围,职位要求和招聘的Title,具体实现的思...

    无涯WuYa
  • 初始python单元测试框架unittest与webdriver的关系(一)

    unittest是属于python的单元测试框架,和java的junit,c#的nunit雷同,unittest的详细说明,具体见官方的地址...

    无涯WuYa
  • 测试驱动之excel文件与ddt模块在自动化中的引用(十三)

    在前面详细的介绍了ddt模块的安装以及在自动化项目中的使用,我们再已验证V客网登录界面为实例,来说明ddt模块在自动化中的实战,验证点分别为如下几点:

    无涯WuYa
  • 响铃:飘扬在德国的海尔旗帜是中国制造的世纪跨越

    就在德国当地时间4月24日,作为世界上展出面积最大的工业展,展品展示技术含量极高的2017年德国汉诺威工业博览会(以下简称“汉诺威展”)正式启幕。在以往的汉诺威...

    曾响铃
  • tomcat配置https

    keystoreFile:证书路径(相对与tomcat主目录,例如:conf/SSL.jks)

    程序员一一涤生
  • 编程难,首先入门就难

    “Hello,world”,其实并不像你想象的那么简单。 某虽不才,小学稀里糊涂的拿过县里奥数三等奖,95年就能用小霸王学习机(Basic)打出杨辉三角形,高中...

    企鹅号小编
  • 使用innobackup实现 基于GTID的从库搭建

    对于较大的数据库,我们一般都是使用innobackup进行备份,备份的及恢复的速度更快。

    二狗不要跑
  • termux

    分享一个超好用的手机命令行高级终端软件termux,强大的安卓手机渗透工具,没有之一。

    AngelNH
  • python【第二十篇】Django表的多对多、Ajax

    这种方式无法直接操作第三张表,但是可以通过10行r这个对象,进行间接操作第三张表:

    用户1432189
  • MEF正在批准LSO Sonata API,以支持SDN业务

    用于标准化生命周期服务编排的LSO Sonata API是本周MEF年会的热门话题之一。 LSO Sonata API使用程序化的API到API接口,允许服务提...

    SDNLAB

扫码关注云+社区

领取腾讯云代金券