WebDriver高阶API

Posted 测试小子

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了WebDriver高阶API相关的知识,希望对你有一定的参考价值。

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()

 

以上是关于WebDriver高阶API的主要内容,如果未能解决你的问题,请参考以下文章

js数组高阶方法reduce经典用法代码分享

Python webdriver API- 浏览器的操作

WebDriver API 实例详解

WebDriver API——鼠标及键盘操作Actions

必须收藏:Selenium webdriver API 大全

Firefox 使用 webdriver python API 时无法打开 url