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()
原文地址:https://www.cnblogs.com/test-chen/p/10538581.html