zoukankan      html  css  js  c++  java
  • Selenium WebDriver- 操作frame中的页面元素

    #encoding=utf-8
    import unittest
    import time
    from selenium import webdriver
    from selenium.webdriver import ActionChains
    
    class VisitSogouByIE(unittest.TestCase):
    
        def setUp(self):
            #启动IE浏览器
            #self.driver = webdriver.Firefox(executable_path = "e:\geckodriver")
            self.driver = webdriver.Ie(executable_path = "e:\IEDriverServer")
            
        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 = "http://127.0.0.1/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.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")
            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):
            # 退出IE浏览器
            self.driver.quit()
    
    if __name__ == '__main__':
        unittest.main()
  • 相关阅读:
    【前缀和】【分类讨论】hdu5163 Taking Bus
    【DFS】bzoj2079 [Poi2010]Guilds
    【贪心】bzoj3850 ZCC Loves Codefires
    【分类讨论】bzoj3856 Monster
    【莫队算法】【权值分块】bzoj2223 [Coci 2009]PATULJCI
    【枚举】bzoj1709 [Usaco2007 Oct]Super Paintball超级弹珠
    【矩阵哈希】【二分答案】【哈希表】bzoj1567 [JSOI2008]Blue Mary的战役地图
    【矩阵哈希】【哈希表】bzoj2351 [BeiJing2011]Matrix
    【哈希表】CODEVS1230 元素查找
    【二分答案】【哈希表】【字符串哈希】bzoj2946 [Poi2000]公共串
  • 原文地址:https://www.cnblogs.com/qingqing-919/p/8709661.html
Copyright © 2011-2022 走看看