WebDriver高阶API(1)

1、使用JavaScript操作页面元素

#encoding=utf-8
import time
import unittest
import traceback
from selenium import webdriver
from selenium.common.exceptions import WebDriverException

class TestDemo(unittest.TestCase):
    def setUp(self):
        #启动浏览器
        self.driver = webdriver.Ie(executable_path = "D:\\IEDriverServer")
    def test_executeScript(self):
        url = "http://www.sogou.com"
        #访问搜狗首页
        self.driver.get(url)
        #构造JavaScript查找搜狗首页的搜索输入框并输入“魔兽世界”的代码字符串
        searchInputBoxJs = "document.getElementById(‘query‘).value=‘魔兽世界‘"
        #构造JavaScript查找搜狗首页的搜索按钮并点击的代码字符串
        searchButtonJs = "document.getElementById(‘stb‘).click()"
        try:
            #通过JavaScript代码在搜索首页输入框中输入“魔兽世界”
            self.driver.execute_script(searchInputBoxJs)
            time.sleep(2)
            #通过JavaScript代码点击搜狗首页上的搜索按钮
            self.driver.execute_script(searchButtonJs)
            time.sleep(2)
            #断言
            self.assertTrue(u"魔兽世界" in self.driver.page_source)
        except WebDriverException,e:
            #当定位失败时,会抛出WebDriverException异常
            print u"在页面中没有找到要操作的页面元素",traceback.print_exc()
        except AssertionError,e:
            print u"页面不存在断言的关键字"
        except Exception,e:
            #发生其他异常时,打印异常堆栈信息
            print traceback.print_exc()

    def tearDown(self):
            self.driver.quit()

if __name__ == "__main__":
    unittest.main()

2、操作滚动条 JS

#encoding=utf-8
import time
import unittest
import traceback
from selenium import webdriver

class TestDemo(unittest.TestCase):
    def setUp(self):
        #启动浏览器
        self.driver = webdriver.Ie(executable_path = "D:\\IEdriverServer")
    def test_scroll(self):
        url = "http://www.sohu.com"
        #访问搜狗首页
        try:
            self.driver.get(url)
            #使用JavaScript的scrollTo函数和document.body.scrollHeight参数
            # 将页面滚动条滑动到页面的最下方
            self.driver.execute_script("window.scrollTo(0,document.body.scrollHeight);")
            #停顿3秒,用于人工验证滚动条是否滑动到指定位置
            #根据测试需要,可注释下面的停顿代码
            time.sleep(3)

            #使用JavaScript 的scrollIntoView函数将被遮挡的元素滚动到可见屏幕上
            #scrollIntoView(true)表示将元素滚动到屏幕中间
            #scrollIntoView(false)表示将元素滚动到屏幕底部
            self.driver.execute_script("document.getElementsByTagName(‘a‘)[500].scrollIntoView(true);")
            time.sleep(3)

            #使用javascript的scrollBy方法,使用0和400横纵坐参数
            #将页面纵向向下滚动400像素
            self.driver.execute_script("window.scrollBy(0,400)")
            time.sleep(3)
        except Exception,e:
            print traceback.print_exc()

    def tearDown(self):
        self.driver.quit()

if __name__ == "__main__":
    unittest.main()

3、操作Ajax产生的浮动框

方法一:通过模拟键盘下箭头进行选择悬浮框选项

#encoding=utf-8
import time
import unittest
from selenium import webdriver
from selenium.webdriver.common.keys import Keys

class TestDemo(unittest.TestCase):
    def setUp(self):
        #启动浏览器
        self.driver = webdriver.Ie(executable_path = "D:\\IEDriverServer")
    def test_AjaxDivOptionByKeys(self):
        url = "http://www.sogou.com"
        #访问sogou首页
        self.driver.get(url)
        #找到搜狗首页中的搜索输入框页面元素
        searchBox = self.driver.find_element_by_id("query")
        #在输入框输入 “魔兽世界”
        searchBox.send_keys(u"魔兽世界")
        #等待2秒,以便悬浮框加载完成
        time.sleep(2)
        for i in range(3):
            #选择悬浮框中的第几个联想关键词选项就循环几次
            #模拟键盘单击下箭头
            searchBox.send_keys(Keys.DOWN)
            time.sleep(0.5)

        #当按下箭头到想要选择的选项后,瑞模拟键盘按回车键,选中该选项
        searchBox.send_keys(Keys.ENTER)
        time.sleep(2)

    def tearDown(self):
        self.driver.quit()

if __name__ == "__main__":
    unittest.main()

方法二:通过匹配模糊内容选择悬浮框中选项

#encoding=utf-8
import time
import unittest
import traceback
from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException

class TestDemo(unittest.TestCase):
    def setUp(self):
        #启动浏览器
        self.driver = webdriver.Ie(executable_path = "D:\\IEDriverServer")
    def test_AjaxDivOptionByWords(self):
        url = "http://www.sogou.com/"
        #访问搜狗首页
        self.driver.get(url)
        try:
            #找到搜狗首页中的搜索输入框页面元素
            searchBox = self.driver.find_element_by_id("query")
            #在搜索输入框中输入“魔兽世界”
            searchBox.send_keys(u"魔兽世界")
            #等待2秒,以便悬浮框完成林加载
            time.sleep(2)
            #查找内容包含“怀旧服”的悬浮框选项
            suggetion_option = self.driver.find_element_by_xpath("//ul/li[contains(.,‘怀旧服‘)]")
            #单击找到的悬浮选项
            suggetion_option.click()
            time.sleep(2)
        except NoSuchElementException,e:
            #打印异常堆栈信息
            print traceback.print_exc()

    def tearDown(self):
        self.driver.quit()

if __name__ == "__main__":
    unittest.main()

方法三:固定选择某一项,使用索引

#encoding=utf-8
import time
import unittest
import traceback
from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException

class TestDemo(unittest.TestCase):
    def setUp(self):
        #启动浏览器
        self.driver = webdriver.Ie(executable_path = "D:\\IEDriverServer")
    def test_AjaxDivOptionByIndex(self):
        url = "http://www.sogou.com"
        #访问搜狗首页
        self.driver.get(url)
        try:
            #找到搜狗首页中的搜索输入框页面元素
            searchBox = self.driver.find_element_by_id("query")
            #在输入框中输入 “魔兽世界”
            searchBox.send_keys(u"魔兽世界")
            #等待2秒以便悬浮杠加载完成
            time.sleep(2)
            #查找悬浮框中的第三项,只需要更改li[3]中索引数字,就可以实现任意单击悬浮框中的选项。注意,索引从1开始
            suggetion_option = self.driver.find_element_by_xpath("//*[@id=‘vl‘]/div[1]/ul/li[3]")
            #单击找到的选项
            suggetion_option.click()
            time.sleep(3)
        except NoSuchElementException,e:
            #打印异常堆栈信息
            print traceback.print_exc()

    def tearDown(self):
        self.driver.quit()

if __name__ == "__mian__":
    unittest.main()

4、结束Windows中浏览器进程

#encoding=utf-8
import unittest
from selenium import webdriver

class TestDemo(unittest.TestCase):
    def test_killWindowsProcess(self):
        chromeDriver = webdriver.Chrome(executable_path="D:\\chromedriver")
        ieDriver = webdriver.Ie(executable_path="D:\\IEDriverServer")
        #导入os包
        import os
        #结束ie浏览器进程
        returnCode = os.system("taskkill /F /iM iexplore.exe")
        if returnCode == 0:
            print u"成功结束Ie浏览器进程"
        else:
            print u"结束IE浏览器进程失败"

        #结束chrome浏览器
        returnCode = os.system("taskkill /F /iM chrome.exe")
        if returnCode == 0:
            print u"成功结束chrome浏览器进程"
        else:
            print u"结束chrome浏览器进程失败"

if __name__ == "__main__":
    unittest.main()

原文地址:https://www.cnblogs.com/test-chen/p/10566780.html

时间: 2024-10-11 12:54:29

WebDriver高阶API(1)的相关文章

【tensorflow2.0】高阶api--主要为tf.keras.models提供的模型的类接口

下面的范例使用TensorFlow的高阶API实现线性回归模型. TensorFlow的高阶API主要为tf.keras.models提供的模型的类接口. 使用Keras接口有以下3种方式构建模型:使用Sequential按层顺序构建模型,使用函数式API构建任意结构模型,继承Model基类构建自定义模型. 此处分别演示使用Sequential按层顺序构建模型以及继承Model基类构建自定义模型. 一,使用Sequential按层顺序构建模型[面向新手] import tensorflow as

聊聊React高阶组件(Higher-Order Components)

使用 react已经有不短的时间了,最近看到关于 react高阶组件的一篇文章,看了之后顿时眼前一亮,对于我这种还在新手村晃荡.一切朝着打怪升级看齐的小喽啰来说,像这种难度不是太高同时门槛也不是那么低的东西如今可不多见了啊,是个不可多得的 zhuangbility的利器,自然不可轻易错过,遂深入了解了一番. 概述 高阶组件的定义 React 官网上对高阶组件的定义: 高阶部件是一种用于复用组件逻辑的高级技术,它并不是 React API的一部分,而是从React 演化而来的一种模式. 具体地说,

OBJECTIVE-C语言的最佳实践和高阶技术期刊OBJC的章节目录

CSDN博客: forlong401 邮件地址:[email protected] 微博:@forlong401 第一章 轻量级视图控制器 第一节.介绍 第二节.轻量级视图控制器 [Chris Eidhof] 第三节.清理表视图的代码[Florian Kugler] 第四节.测试试图控制器[Daniel Eggert] 第五节.视图控制器容器[Ricki Gregersen] 第二章 并发编程 第一节.编辑语 第二节.并发编程:API接口和挑战[Florian Kugler] 第三节.一般的后台

奇舞js笔记——*——过程抽象,高阶函数,面向函数编程

注: 1.学习视频地址 2.ppt地址 3.个人感想: 是我hin厉害的师父推荐我看的月影大大的视频,感觉对于我这个小白来说,真的是一遍又一遍的刷新知识面.我觉得像月影大大这种大佬的思路,我接触之后真的是受益匪浅. 所以我总结出来不仅是自己记笔记,也是想分享给想要成为真正的前端“工程师”的前端er. 真的很珍惜这种知识面被刷新的感觉——越学习,越感到自己无知,共勉. 摘要 1.数据抽象是针对数据处理的: 2.过程抽象(例如高阶函数)是针对函数处理的: 3.用高阶函数可以对已有API的接口进行修改

Scala入门到精通——第十三节 高阶函数

本节主要内容 高阶函数简介 Scala中的常用高阶函数 SAM转换 函数柯里化 偏函数 1. 高阶函数简介 高阶函数主要有两种:一种是将一个函数当做另外一个函数的参数(即函数参数):另外一种是返回值是函数的函数.这两种在本教程的第五节 函数与闭包中已经有所涉及,这里简单地回顾一下: (1)函数参数 //函数参数,即传入另一个函数的参数是函数 //((Int)=>String)=>String scala> def convertIntToString(f:(Int)=>String

.Net高阶异常处理第二篇~~ dump进阶之MiniDumpWriter

dump文件相信有些朋友已经很熟悉了,dump文件的作用在于保存进程运行时的堆栈信息,方便日后排查软件故障,提升软件质量.关于dump分析工具windbg.adplus的文章更多了,如果您还不知道怎么使用请移步: 使用Windbg找出死锁,解决生产环境中运行的软件不响应请求的问题 ADPlus简介 这里接我的上篇文章:送专利啦~~ .Net高阶异常处理之TopLevelEH 继续讲,捕捉到异常之后我们该怎么办. 一般来讲,我们想知道当时程序崩溃的相关信息,同时弹出友好对话框,当用户点击OK后关闭

高阶组件

前言 本文代码浅显易懂,思想深入实用.此属于react进阶用法,如果你还不了解react,建议从文档开始看起. 我们都知道高阶函数是什么, 高阶组件其实是差不多的用法,只不过传入的参数变成了react组件,并返回一个新的组件. A higher-order component is a function that takes a component and returns a new component. 形如: const EnhancedComponent = higherOrderComp

迈向高阶:优秀Android程序员必知必会的网络基础

1.前言 网络通信一直是Android项目里比较重要的一个模块,Android开源项目上出现过很多优秀的网络框架,从一开始只是一些对HttpClient和HttpUrlConnection简易封装使用的工具类,到后来Google开源的比较完善丰富的Volley,再到如今比较流行的Okhttp.Retrofit. 要想理解他们之间存在的异同(或者具体点说,要想更深入地掌握Android开发中的网络通信技术),必须对网络基础知识.Android网络框架的基本原理等做到心中有数.信手拈来,关键时刻才能

react:高阶组件wrappedComponent

什么是高阶组件? 高阶部件是一种用于复用组件逻辑的高级技术,它并不是 React API的一部分,而是从React 演化而来的一种模式. 具体地说,高阶组件就是一个接收一个组件并返回另外一个新组件的函数! 解决什么问题? 随着项目越来越复杂,开发过程中,多个组件需要某个功能,而且这个功能和页面并没有关系,所以也不能简单的抽取成一个新的组件,但是如果让同样的逻辑在各个组件里各自实现,无疑会导致重复的代码.比如页面有三种弹窗一个有title,一个没有,一个又有右上角关闭按钮,除此之外别无它样,你总不