• Selenium Webdriver API(8)


    Selenium Webdriver API(8)

    40、操作frame中的元素 switch_to.frame

    #encoding=utf-8
    import time
    import unittest
    from selenium import webdriver
    
    class visitLocalWebByIe(unittest.TestCase):
        def setUp(self):
            #启动浏览器
            self.driver = webdriver.Ie(executable_path = "D:\IEDriverServer")
        def test_HandleFrame(self):
            #导入显式等待类
            from selenium.webdriver.support.ui import WebDriverWait
            #导入期望场景类
            from selenium.webdriver.support import expected_conditions as EC
            #导入异常类
            from selenium.common.exceptions import TimeoutException
            url = "http://127.0.0.1:8080/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())
                #打印alert信息
                print alertWindow.text
                alertWindow.accept() #等同于点击确定
            except TimeoutException,e:
                print e
    
            #使用driver.switch_to.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")
            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
            self.driver.switch_to.default_content()
    
            self.driver.switch_to.frame("rightframe")
            assert u"这是右侧 frame 页面上的文字" in self.driver.page_source
            self.driver.switch_to.default_content()
    
        def tearDown(self):
            self.driver.quit()
    
    if __name__ == "__main__":
        unittest.main()
        

    41、使用frame源码定位frame

    #encoding=utf-8
    import time
    import unittest
    from selenium import webdriver
    
    class visitLocalFrameByIe(unittest.TestCase):
        def setUp(self):
            #启动浏览器
            self.driver = webdriver.Ie(executable_path = "D:\IEDriverServer")
        def test_HandleFrameByPageSource(self):
            url = "http://127.0.0.1:8080/frameset.html"
            #访问自定义网页
            self.driver.get(url)
            #找到页面所有的frame页面元素对象,并存储到名为frameList列表中
            frameList = self.driver.find_elements_by_tag_name("frame")
            #通过for循环遍历frameList中所有的frame页面,查找页面源码中含有“中间 frame”的frame页面
            for frame in frameList:
                #进入frame页面
                self.driver.switch_to.frame(frame)
                #判断每个frame的HTML源码中是否包含“中间 frame”几关键字
                if u"中间 frame" in self.driver.page_source:
                    #如果包含需要查找的关键字,则查找到页面上的p标签元素
                    p = self.driver.find_element_by_xpath("//p")
                    #断言页面上p 元素文本内容是否是“这是中间 frame 页面上的文字”
                    self.assertAlmostEqual(u"这是中间 frame 页面上的文字",p.text)
                    #退出frame
                    self.driver.switch_to.default_content()
                    #找到指定的frame页面,并做相应的操作后退出循环
                    break
                else:
                    #如果没有找到指定的frame,则调用此行代码,返回到frameset页面中
                    #以便下次for循环中给继续调用driver.switch_to.frame方法,否则会报错
                    self.driver.switch_to.default_content()
    
        def tearDown(self):
            self.driver.quit()
    
    if __name__ == "__main__":
        unittest.main()
        

    42、操作iframe

    #encoding=utf-8
    import time
    import unittest
    from selenium import webdriver
    
    class visitLocalIframeByIe(unittest.TestCase):
        def setUp(self):
            #启动浏览器
            self.driver = webdriver.Ie(executable_path = "D:\IEDriverServer")
        def test_HandleIFrame(self):
            url = "http://127.0.0.1:8080/frameset.html"
            #访问自定义网页
            self.driver.get(url)
            #改变操作区域,进入页面上的第一个frame,也就是左侧的frame
            self.driver.switch_to.frame(self.driver.find_element_by_id("leftframe"))
            #断言页面是否存在“这是左侧 frame 页面上的文字”关键字串,以判断是否成功切换进frame页面
            assert u"这是左侧 frame 页面上的文字" in self.driver.page_source
    
            #改变操作区域,切换进入id为showIfame的iframe页面
            self.driver.switch_to.frame(self.driver.find_element_by_id("showIfame"))
            #断言页面是否存在“这是 iframe 页面上的文字”这样的关键字串,以便判断是否成功切换进iframe
            assert u"这是iframe页面上的文字" in self.driver.page_source
    
            #将操作区域切换到frameset页面,以便能成功进入其他frame
            self.driver.switch_to.default_content()
            #断言页面的title值 是否 为“frame 页面”
            assert u"frameset 页面" == self.driver.title
    
            #改变操作区域,进入中间frame
            self.driver.switch_to.frame(1)
            #断言页面上是否存在 “这是中间 frame 页面上的文字”这样的关键字串
            assert u"这是中间 frame 页面上的文字" in self.driver.page_source
    
        def tearDown(self):
            self.driver.quit()
    
    if __name__ == "__main__":
        unittest.main()

    43、操作JavaScript的Alert弹窗

    #encoding=utf-8
    import time
    import unittest
    from selenium import webdriver
    
    class visitLocalAlertByIe(unittest.TestCase):
        def setUp(self):
            #启动浏览器
            self.driver = webdriver.Ie(executable_path = "D:\IEDriverServer")
        def test_HandleAlert(self):
            #导入异常类
            from selenium.common.exceptions import NoAlertPresentException
            url = "http://127.0.0.1:8080/test_alert.html"
            #访问自定义网页
            self.driver.get(url)
            #通过id属性值找到页面上的按钮元素
            button = self.driver.find_element_by_id("button")
            #单击按钮元素,则会弹出一个Alert消息框,上面显示“这是一个 alert 弹出框”
            button.click()
            try:
                #使用driver.switch_to.alert方法获取alert对象
                alert = self.driver.switch_to.alert
                time.sleep(2)
                #使用alert.text属性获取alert框中的内容,并断言文字内容是否是“这是一个 alert 弹出框”
                self.assertEqual(alert.text,u"这是一个 alert 弹出框")
                #调用alert对象的accept()方法,模拟鼠标单击alert弹窗上的“确定”按钮,以便关闭弹出框
                alert.accept()
            except NoAlertPresentException,e:
                #如果Alert框未弹出显示在页面上,则会抛出NoALertPresentException的异常
                self.fail(u"尝试操作的alert框未找到")
                print e
    
        def tearDown(self):
            self.driver.quit()
    
    if __name__ == "__main__":
        unittest.main()
  • 相关阅读:
    SQL server 笔记8
    SQL server 笔记7
    SQL server 笔记6
    SQL server的一些函数即笔记5
    SQL server 练习查询45题(18-45)及笔记4
    SQL server 练习查询45题(1-17)及笔记 3
    SQL server 学习笔记2
    SQL server 学习笔记
    C#复习笔记
    学习递归笔记
  • 原文地址:https://www.cnblogs.com/test-chen/p/10538581.html
Copyright © 2020-2023  润新知