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

来源:互联网 发布:福建知天气 编辑:程序博客网 时间:2024/06/05 10:47

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

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

# _*_ coding: utf-8 _*_from selenium import webdriverfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.common.keys import Keysfrom selenium.webdriver.support.ui import Selectfrom selenium.common.exceptions import NoSuchAttributeExceptionimport unittest,time,refrom time import strftime, localtimefrom datetime import datetimeimport HTMLTestRunnerimport mod_login_onclass 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")#进入Adriver.switch_to.frame("mainscreenB")#进入Bdriver.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 0