zoukankan      html  css  js  c++  java
  • webDriver基本运用

    import time
    from selenium import webdriver
    import unittest
    import HTMLTestRunner
    # webDriver基本应用
    class TestWebdriver(unittest.TestCase):
        def setUp(self):
            self.driver = webdriver.Chrome()
            self.url = "http://www.baidu.com"
    
        def tearDown(self):
            self.driver.quit()
    
        def test_visitRcentURL(self):
            firstVisitURL = "http://www.sogou.com"
            secondVisitURL = "http://www.baidu.com"
            self.driver.get(firstVisitURL)
            self.driver.get(secondVisitURL)
            time.sleep(5)
            # 后退
            self.driver.back()
            # 前进
            self.driver.forward()
            time.sleep(5)
            self.driver.quit()
    
    
        def test_refreshCurrentPage(self):
            url = "http://www.soguu.com"
            self.driver.get(url)
            time.sleep(5)
            #刷新当前页面
            self.driver.refresh()
            self.driver.quit()
    
        def test_maximizeWindow(self):
            url = "http://www.baidu.com"
            #最大化浏览器窗口
            self.driver.get(url)
            self.driver.maximize_window()
            self.driver.quit()
    
        def test_window_position(self):
            url = "http://www.baidu.com"
            self.driver.get(url)
            # 获取当前浏览器在屏幕上的位置,返回的是字典
            position = self.driver.get_window_position()
            print("当前浏览器所在位置的横坐标",position['x'])
            print("当前浏览器所在位置的纵坐标",position['y'])
            # 设置当前浏览器的屏幕上的位置
            self.driver.set_window_position(x = 200,y = 400)
            # 获取设置后浏览器的位置
            print(self.driver.get_window_position())
            self.driver.quit()
    
        def test_window_size(self):
            url = "http://www.baidu.com"
            self.driver.get(url)
            # 获取浏览器大小,返回一个数组
            sizeDict = self.driver.get_window_size()
            print('当前浏览器的宽',sizeDict['width'])
            print('当前浏览器的高',sizeDict['height'])
            self.driver.set_window_size(width=200,height=400,windowHandle='current')
            print('再次获取设置后浏览器大小',
                  self.driver.get_window_size(windowHandle='current'))
            self.driver.quit()
    
        # 获取当前页面的title
        def test_getTitle(self):
            self.driver.get(self.url)
            print('获取当前页面的title',self.driver.title)
    
        # 获取当前页面的源码
        def test_getPageSource(self):
            self.driver.get(self.url)
            # 获取当前页面的源码
            pageSuurce = self.driver.page_source
            print(pageSuurce)
            self.assertEqual(u'新闻'in pageSuurce,"页面源码中未找到新闻关键字")
    
        # 获取当前页面URL地址
        def test_getCurrentPageUrl(self):
            self.driver.get(self.url)
            currentUrl=self.driver.current_url
            print('获取当前地址',currentUrl)
            self.assertEqual(currentUrl,"https://www.baidu.com",'当前页面非预期')
    
        # 获取与切换浏览器窗口句柄
        def test_operateWindowHandle(self):
            self.driver.get(self.url)
            # 获取当前句柄
            now_handle = self.driver.current_window_handle
            print('获取当前句柄',now_handle)
            self.driver.find_element(by="id",value= "kw").send_keys("w3cschool")
            self.driver.find_element(by="id",value= "su").click()
            time.sleep(3)
            self.driver.find_element(by="partial link text",value="百度百科").click()
            time.sleep(5)
            # 获取所有句柄
            all_handles = self.driver.window_handles
            print("++++++",self.driver.window_handles[-1])
            for handle in all_handles:
                if handle == now_handle:
                    print("句柄相同",handle)
    
                print(handle)
    
        # 获取页面元素的基本信息
        def test_getBasicInfo(self):
            self.driver.get(self.url)
            newElement = self.driver.find_element(by="link text",value='新闻')
            # 获取新闻元素的基本信息
            print('元素的标签名',newElement.tag_name)
            print('元素的size:',newElement.size)
    
        # 获取页面元素的文本内容
        def test_getWebElementText(self):
            self.driver(self.url)
            aElement = self.driver.find_element(by="link text", value='新闻')
            a_text = aElement.text
            self.assertEqual(a_text, u'新闻')
    
        # 判断页面元素是否可见
        def test_getWebElementIsDisplayed(self):
            self.driver.get(self.url)
            text = self.driver.find_element(by="link text", value='新闻')
            print('判断新闻是否可见',text.is_displayed())
    
        # 判断页面元素是否可操作
        def test_getWebElementIsEnabled(self):
            self.driver.get(self.url)
            text1 = self.driver.find_element(by="link text", value='新闻')
            print('判断新闻是否可操作',text1.is_enabled())
    
        # 获取页面元素的属性
        def test_getWebElementAttribute(self):
            self.driver.get(self.url)
            searchBox = self.driver.find_element(by="id", value="kw")
            print("搜索输入框name的属性值",searchBox.get_attribute('name'))
            searchBox.send_keys(u"上海诸毅管道工程有限公司")
            print('搜索框中value值',searchBox.get_attribute('value'))
    
        # 获取页面元素的css属性值
        def test_getWebElementCssValue(self):
            self.driver.get(self.url)
            searchBox = self.driver.find_element(by="id", value="kw")
            print('搜索输入框的高度',searchBox.value_of_css_property("height"))
            print('搜索输入框的宽度', searchBox.value_of_css_property("width"))
            font = searchBox.value_of_css_property("font - family")
            self.assertEqual(font,"arial")
    
        # 清空输入框中的内容
        def test_clearInputBoxText(self):
            self.driver.get(self.url)
            searchBox = self.driver.find_element(by="id", value="kw")
            searchBox.send_keys(u"上海诸毅管道工程有限公司")
            time.sleep(3)
            searchBox.clear()
            time.sleep(3)
    
        # 双击某个元素
        def test_doubleClick(self):
            self.driver.get(self.url)
            inputBox=self.driver.find_element(by="id", value="su")
            # 导入支持双击操作模块
            from selenium.webdriver import ActionChains
            # 开始双击操作
            action_chains =  ActionChains(self.driver)
            action_chains.double_click(inputBox).perform()
            time.sleep(3)
    
        # 操作单选下拉框
        def test_printSelectText(self):
            url = "F:\tset1.html"
            self.driver.get(url)
            select = self.driver.find_element_by_name('fruit')
            # 因为all_options是一组元素所以使用driver.find_elements_by_tag_name
            all_options = self.driver.find_elements_by_tag_name('option')
            for option in all_options:
                print("选项显示文本",option.text)
                print("选项值",option.get_attribute("value"))
                option.click()
            time.sleep(3)
    
        # 选择下拉列表元素的三种方法
        def test_operateDropList(self):
            url = "F:\tset1.html"
            self.driver.get(url)
            # 导入select模块
            from selenium.webdriver.support.ui import Select
            select_element = Select(self.driver.find_element_by_xpath('//select'))
            print('打印默认选中的文本',select_element.first_selected_option.text)
            # 获取所有选择项的页面元素对象
            all_options = select_element.options
            print('打印总个数',len(all_options))
            '''
            is_enabled()判断元素是否可操作
            is_selected()判断元素是否被选中
            '''
            # 判断需要的元素是可以操作并且不被选中
            if all_options[1].is_enabled() and not all_options[1].is_selected():
                # 方法一:通过序号选中第二个元素,序号从0开始
                select_element.select_by_index(1)
                print('打印已经选中的文本',select_element.all_selected_options[0].text)
                self.assertEqual(select_element.all_selected_options[0].text,u'西瓜')
            time.sleep(3)
            # 方法二:通过选项的显示文本选择文本为猕猴桃选项
            select_element.select_by_visible_text("猕猴桃")
            # 断言已选中项的文本是否是猕猴桃
            print('被选中的文本值',select_element.all_selected_options[0].text)
            self.assertEqual(select_element.all_selected_options[0].text,u'猕猴桃')
            time.sleep(3)
            # 方法三:通过选项的value属性值选择value = "shanzha"选项
            select_element.select_by_value("shanzha")
            print('被选中的文本值',select_element.all_selected_options[0].text)
            self.assertEqual(select_element.all_selected_options[0].text,u'山楂')
    
        # 断言单选列表选项值
        def test_checkSelectText(self):
            url = "F:\tset1.html"
            self.driver.get(url)
            # 导入select模块
            from selenium.webdriver.support.ui import Select
            select_element = Select(self.driver.find_element_by_xpath('//select'))
            # 获取页面中所有选项的元素对象
            actual_options = select_element.options
            # 声明一个List对象,存储下拉列表中所期望出现的文字内容
            expect_optionsList = [u"桃子",u"西瓜",u"橘子",u"猕猴桃",u"山楂",u"荔枝"]
            # 使用map()函数获取页面中下拉列表展示的选项内容组成的列表对象
            actual_optionsList = list(map(lambda option: option.text,actual_options))
            # 断言期望列表对象和实际列表对象是否完全一致
            self.assertEqual(expect_optionsList,actual_optionsList)
    
        # 操作多选的选择列表
        def test_operateMultipleOptionDropList(self):
            url = "F:\tset2.html"
            self.driver.get(url)
            # 导入select模块
            from selenium.webdriver.support.ui import Select
            time.sleep(2)
            select_element = Select(self.driver.find_element_by_xpath('//select'))
            # 通过序号选择第一个元素
            select_element.select_by_index(0)
            # 通过选项的文本选择山楂选项
            select_element.select_by_visible_text("山楂")
            # 通过选项的value属性值选择value = "mihoutao"
            select_element.select_by_value("mihoutao")
            # 打印所有的选中项
            for option in select_element.all_selected_options:
                print('所有选中的文本:',option)
            # 取消所有已选中项
            select_element.deselect_all()
            time.sleep(2)
            print("-------------再次选中3个选项--------------")
            select_element.select_by_index(1)
            time.sleep(2)
            select_element.select_by_visible_text("荔枝")
            select_element.select_by_value("jvzi")
            # 通过选项文本取消已选中的文本为"荔枝"
            select_element.deselect_by_visible_text("荔枝")
            # 通过序号取消已选中的序号为1的选项
            select_element.deselect_by_index(1)
            # 通过选项的value属性取消已选中的value = "jvzi"的选项
            select_element.deselect_by_value("jvzi")
    
        # 操作可以输入的下拉列表
        def test_operateMultipleOptionDropList(self):
            url = "F:\tset3.html"
            self.driver.get(url)
            from selenium.webdriver.common.keys import Keys
            self.driver.find_element_by_id("select").clear()
            time.sleep(3)
            # 输入的同事按下箭头键
            self.driver.find_element_by_id("select").send_keys("c",Keys.ARROW_DOWN)
            self.driver.find_element_by_id("select").send_keys( Keys.ARROW_DOWN)
            self.driver.find_element_by_id("select").send_keys( Keys.ARROW_DOWN)
            time.sleep(3)
    
        # 操作单选框
        def test_operateRadio(self):
            url = "F:\tset4.html"
            self.driver.get(url)
            berryRadio = self.driver.find_element_by_xpath("//input[@value='berry']")
            berryRadio.click()
            # 断言“草莓”单选框未成功选中
            self.assertTrue(berryRadio.is_selected(),u'草莓单选框未被选中')
            time.sleep(2)
            if berryRadio.is_selected():
                watermelonRadio = self.driver.find_element_by_xpath("//input[@value='watermelon']")
                watermelonRadio.click()
                self.assertFalse(berryRadio.is_selected())
            radioList= self.driver.find_elements_by_xpath("//input[@name = 'fruit']")
    
            for radio in radioList:
                print(radio.get_attribute("value"))
                if radio.get_attribute("value") == "orange":
                    time.sleep(3)
                    if not radio.is_selected():
                        radio.click()
                        self.assertEqual(radio.get_attribute("value"),"orange")
    
        # 使用Title属性识别和操作新弹出的浏览器窗口
        def test_identifyPopUpWindowByTitle(self):
            from selenium.common.exceptions import NoSuchAttributeException,TimeoutException
            from selenium.webdriver.support import expected_conditions as Ec
            from selenium.webdriver.common.by import By
            from selenium.webdriver.support.ui import WebDriverWait
            import traceback
            url = "F:\tse5.html"
            self.driver.get(url)
            WebDriverWait(self.driver,10,0.2).until(Ec.element_to_be_clickable(
                (By.LINK_TEXT,'sogou搜索')
            )).click()
            all_handles = self.driver.window_handles
            print(self.driver.current_window_handle)
            print(len(all_handles))
            time.sleep(3)
            if len(all_handles)>0:
                try:
                    for windowHandle in all_handles:
                        self.driver.switch_to.window(windowHandle)
                        print(self.driver.title)
                        if self.driver.title == u"搜狗搜索引擎 - 上网从搜狗开始":
                            WebDriverWait(self.driver,10,0.2).until(
                                lambda x: x.find_element_by_id("query")).send_keys(
                                    u"sogou首页的浏览器窗口被找到")
                            time.sleep(2)
                except NoSuchAttributeException:
                    print(traceback.print_exc())
                except TimeoutException:
                    print(traceback.print_exc())
            time.sleep(3)
            self.driver.switch_to.window(all_handles[0])
            print(self.driver.title)
            time.sleep(3)
            self.assertEqual(self.driver.title,u"你喜欢的水果")
    
        # 操作Frame中的页面元素
        def test_HandleFrame(self):
            from selenium.webdriver.support import expected_conditions as Ec
            from selenium.webdriver.support.ui import WebDriverWait
            from  selenium.common.exceptions import TimeoutException
            url = "F:\frameset.html"
            self.driver.get(url)
            # 使用索引方式进入指定的frame页面,索引号从0开始
            # 所以想进入中间的frame,需要使用索引号1
            # 如果没有使用此行代码,则无法找到页面中左侧frame 中的任何页面元素
            self.driver.switch_to.frame(0)
            # 找到左侧frame中的p标签元素
            leftFrameText=self.driver.find_element_by_xpath("//p")
            # 断言左侧frame中的文字是否和"这是左侧frame页面上的文字"几个关键字相一致
            self.assertAlmostEqual(leftFrameText.text,u"这是左侧frame页面上的文字")
            # 找到左侧frame中的按钮元素,并单击该元素
            self.driver.find_element_by_tag_name("input").click()
            try:
                # 动态等待alert窗口出现
                alertWindow = WebDriverWait(self.driver,10).until(
                    Ec.alert_is_present())
                print('打印alert信息',alertWindow.text)
                alertWindow.accept()
            except TimeoutException:
                print("超时")
            # 使用driver.switchTo.default_content方法,从左侧frame中返回到frameset页面
            # 如果不调用此行代码,则无法从左侧frame页面中直接进入其他frame页面
            self.driver.switch_to.default_content()
            # 通过标签名找到页面中所有的frame元素,然后通过索引进入该frame
            self.driver.switch_to.frame(self.driver.find_elements_by_tag_name("frame")[1])
            # 断言页面源码中是否存在"这是中间frame页面上的文字"关键字串
            assert u"这是中间frame页面上的文字" in self.driver.page_source
            # 在输入框中输入"我在中间frame"
            self.driver.find_element_by_tag_name("input").send_keys(u"我在中间frame")
            time.sleep(3)
            self.driver.switch_to.default_content()
    
            self.driver.switch_to.frame(self.driver.find_element_by_id("rightframe"))
            assert u"这是右侧frame页面上的文字" in self.driver.page_source
            time.sleep(3)
            self.driver.switch_to.default_content()
    
        # 使用Frame中的HTML源码内容操作Frame
        def test_HandleFrameByPageSource(self):
            url = "F:\frameset.html"
            self.driver.get(url)
            # 找到页面上的所有frame页面对象,并储存到名为framesList列表中
            framesList = self.driver.find_elements_by_tag_name("frame")
            # 通过for循环遍历framesList中所有的frame页面,查找页面源码中含有"中间frame"的frame页面
            frame = 0
            for frame in range(len(framesList)):
                # 进入到frame页面
                time.sleep(2)
                self.driver.switch_to.frame(frame)
                # 判断每个frame的HTML源码中是否包含"中间frame"几个关键字
                time.sleep(2)
                if u"中间frame" in self.driver.page_source:
                    # 如果包含需要查找的关键字,则查找到页面上的p标签元素
                    time.sleep(2)
                    p = self.driver.find_element_by_xpath("//p")
                    # 断言页面上p元素文本内容是否是"这只中间frame页面上的文字"
                    time.sleep(2)
                    self.assertAlmostEqual(u"这是中间frame页面上的文字",p.text)
                    # 退出frame
                    self.driver.switch_to.default_content()
                    break
                else:
                    # 如果没找到指定frame,则调用此行代码,返货到frameset页面中
                    # 以便下次for循环中能继续调用driver.switch_to.frame方法,否则会报错
                    self.driver.switch_to.default_content()
    
    
    
    
    if __name__ == "__main__":
       unittest.main()
       # suite = unittest.TestSuite()
       # suite.addTest(TestWebdriver("test_doubleClick"))
       # runner = unittest.TextTestRunner()
       # runner.run(suite)
  • 相关阅读:
    今日总结
    微任务与宏任务
    20171128微信小程序
    20171128-微信小程序之点餐
    git
    第二次学习Javascript笔记
    base64图片
    网页布局基础-css版
    StuQ技能图谱——前端
    前端开发工具
  • 原文地址:https://www.cnblogs.com/zhmiao/p/10541809.html
Copyright © 2011-2022 走看看