python3.5+selenium3.4自动化测试5_frame中的对象

这篇主要讲定位frame中的对象,经常会遇到使用firebug定位到某个元素,但运行的时候却找不到元素,很多情况是因为在web页面中经常有嵌套其他页面,所以一般我们需要在firebug的html页面中搜索一下frame或iframe

搜索frame.png
从图片可以看出(蓝色的是定位的元素)在一个iframe的页面中,所以如果没有切换到嵌套页面是找不到已经定位的元素的
贴下代码:

# _*_ coding: utf-8 _*_

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import Select
from selenium.common.exceptions import NoSuchAttributeException
import unittest,time,re
from time import strftime, localtime
from datetime import datetime

import HTMLTestRunner
import mod_login_on

class Createext(unittest.TestCase):
    def setUp(self):
        self.driver=webdriver.Chrome()
        self.driver.implicitly_wait(30)
        self.base_url="http://192.168.1.131"
        self.verificationErrors=[]
        self.accept_next_alert=True

    def test_createext(self):
        u"""2.1.创建三个分机"""
        '''
        2.1.创建三个分机
        '''

        driver=self.driver
        driver.get(self.base_url+"/")
        mod_login_on.login(self)


        try:
            time.sleep(3)
            driver.switch_to_alert().accept()
            driver.implicitly_wait(3) #智能等待3
            # driver.find_element_by_id("current").click()
            driver.find_element_by_xpath(".//*[@id='nav']/ul/li[4]/a").click()

            #切换到frame中再找到对应的元素
            driver.switch_to.frame("mainscreen")
            driver.find_element_by_xpath(".//*[@id='btn_new_bulkexten']/span/span").click()
            driver.find_element_by_xpath(".//*[@id='btn_save_bulk']/span/span").click()
            driver.find_element_by_id("CHECKALL").click()
            driver.find_element_by_xpath(".//*[@id='btn_delete_selected']/span/span").click()
            driver.switch_to_alert().accept()

            #从frame中切回主文档
            driver.switch_to.default_content()

            driver.find_element_by_xpath(".//*[@id='applyChanges_Button']/font").click()

            #切换到frame中再找到对应的元素
            driver.switch_to.frame("mainscreen")
            driver.find_element_by_xpath(".//*[@id='btn_new_exten']/span/span").click()
            Select(driver.find_element_by_id('edit_VOIPUser_Type')).select_by_value("0")#创建sip账号
            driver.find_element_by_id("new_ext").clear()
            driver.find_element_by_id("new_ext").send_keys(5001)
            driver.find_element_by_id("edit_fullname").clear()
            driver.find_element_by_id("edit_fullname").send_keys(5001)
            driver.find_element_by_id("edit_callerid").clear()
            driver.find_element_by_id("edit_callerid").send_keys(5001)
            driver.find_element_by_id("edit_register_name").clear()
            driver.find_element_by_id("edit_register_name").send_keys(5001)
            driver.find_element_by_xpath(".//*[@id='btn_save']/span/span").click()
            time.sleep(5)


            driver.find_element_by_xpath(".//*[@id='btn_new_exten']/span/span").click()
            Select(driver.find_element_by_id('edit_VOIPUser_Type')).select_by_value("1")#创建iax账号
            driver.find_element_by_id("new_ext").clear()
            driver.find_element_by_id("new_ext").send_keys(5002)
            driver.find_element_by_id("edit_fullname").clear()
            driver.find_element_by_id("edit_fullname").send_keys(5002)
            driver.find_element_by_id("edit_callerid").clear()
            driver.find_element_by_id("edit_callerid").send_keys(5002)
            driver.find_element_by_xpath(".//*[@id='btn_save']/span/span").click()
            time.sleep(5)


            driver.find_element_by_xpath(".//*[@id='btn_new_exten']/span/span").click()
            Select(driver.find_element_by_id('edit_VOIPUser_Type')).select_by_value("2")#创建iax账号
            driver.find_element_by_id("new_ext").clear()
            driver.find_element_by_id("new_ext").send_keys(5003)
            driver.find_element_by_id("edit_fullname").clear()
            driver.find_element_by_id("edit_fullname").send_keys(5003)
            driver.find_element_by_id("edit_callerid").clear()
            driver.find_element_by_id("edit_callerid").send_keys(5003)
            driver.find_element_by_xpath(".//*[@id='btn_save']/span/span").click()
            time.sleep(5)


            #从frame中切回主文档
            driver.switch_to.default_content()

            driver.find_element_by_xpath(".//*[@id='applyChanges_Button']/font").click()

            time.sleep(3)

            driver.find_element_by_xpath(".//*[@id='nav']/ul/li[6]/a ").click()

            driver.find_element_by_id("extstatus").click()

            driver.switch_to.frame("mainscreen")

            img_url=driver.find_element_by_xpath(".//*[@id='table_Ext_list']/tbody/tr[2]/td[1]/img").get_attribute('src')

            img_name=img_url.split('/')[4]
            if img_name=="status_gray.png":
                pass
            else:
                driver.get_screenshot_as_file(u"D:/python/selenium/error_png/2.ext/2.1/%s.png" % datetime.now().strftime("%Y%m%d.%H%M%S.%f")[:-3])

            time.sleep(10)#等待10


        except:
            driver.get_screenshot_as_file(u"D:/python/selenium/error_png/2.ext/2.1/%s.png" % datetime.now().strftime("%Y%m%d.%H%M%S.%f")[:-3])

    def tearDown(self):
        time.sleep(3)
        self.driver.quit()
        self.assertEqual([],self.verificationErrors)
if __name__=="__main__":
    suite=unittest.TestSuite()
    suite.addTest(Createext("test_createext"))

    unittest.TextTestRunner().run(suite)

1.这边主要通过driver.switch_to.frame(“mainscreen”)这句话来切入到id=”mainscreen”的嵌套中,当然也可以用name,tag_name,只要在括号中填入对应的即可,通过这句话,切入到嵌套中之后,就可以按之前用firebug定位到的元素进行编写即可

2.driver.switch_to.default_content()这句话是退出原来的嵌套回到原来的主文档,就可以在原来的主文档操作,所以这边主要用firebug查看下,到底你对应的元素是在哪个iframe中

3.driver.switch_to.parent_frame()可以看到parent这个词,就是父的意思,主要遇到的是多个嵌套的问题,可能嵌套里面还有一个嵌套,比如

<html>
    <iframe id="mainscreenA">
        <iframe id="mainscreenB" / >
    </iframe>
</html>

这时候你需要进入到B iframe处理完后又要退回Aiframe,就需要用到这个

driver.switch_to.frame("mainscreenA")#进入A
driver.switch_to.frame("mainscreenB")#进入B
driver.switch_to.parent_frame()  #退回A,如果当前是主文档,则无效果

4.这个代码中还有一个获取图片的名字,其实在很多爬虫图片中经常会爬取图片名,这边主要用到

 img_url=driver.find_element_by_xpath(".//*[@id='table_Ext_list']/tbody/tr[2]/td[1]/img").get_attribute('src')

 img_name=img_url.split('/')[4]

通过获得src的属性,获得图片的源地址src=”../images/status_gray.png”
通过split可以找到对应的图片名字

—————————————————–分割线—————————————————–

用实际用例代码长期更新,介绍selenium使用中的知识小点,希望大家关注

关注微信公众号:

这里写图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

无敌轻车

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值