selenium使用心得
selenium环境搭建:
- firefox49.02;geckodriver-v0.15.0;selenium3.7.0
- python2.7.8环境
由于项目限制,所以用的firefox49.02版本,因为版本问题,需要下载一个驱动才可以运行,驱动的版本比较多,试过16和15版本,最终还是v0.15.0版本和这个版本的firefox搭配使用最好,selenium也没有使用最新版本,而是用的3.7.0。使用这套系统下来可以成功跑通。
遇到问题
在使用过程中,发现页面中通过xpath寻找时,总是会跳到另外一个控件上,后面发现两个控件的xpath完全一样。但是使用last或者父节点的方式也无法找到该控件。最后打开firefox里面的查看器,通过整个网页布局一层一层往下看,发现需要点击的那个控件是在里层的一个新html上,通过两层iframe才可以找到
从图中可以看到需要点击的那个按钮是在整个网页的第二层iframe里面,两层iframe名字均为mainFrameContent
,所以我这边就调用了两次,然后进入最后这个框里面实现点击该button的作用
browser.switch_to_default_content()
#切到摄像机
browser.switch_to_frame("mainFrameContent")
browser.find_element_by_xpath("html/body/div[2]/ul/li[2]/a").click()
time.sleep(2)
#选择添加
browser.switch_to_frame("mainFrameContent")
browser.find_element_by_xpath("html/body/div[1]/div[2]/div[1]/div[2]/button[1]").click()
整体代码:
# coding: utf-8
from selenium import webdriver
from selenium.webdriver.support.select import Select
import time
browser = webdriver.Firefox()
browser.get("http://192.168.10.77:9080/portal/page/configurations.html#menu1/deviceMgr")
time.sleep(2)
browser.find_element_by_id("username").click()
browser.find_element_by_id("username").send_keys("admin")
browser.find_element_by_id("passwordTxt").click()
browser.find_element_by_id("passwordTxt").send_keys("suntek")
browser.find_element_by_id("register-submit-btn").click()
time.sleep(2)
browser.find_element_by_xpath("//*[@id='config-menu1']/ul/li[2]/a").click()
time.sleep(2)
for i in range(10000):
browser.switch_to_default_content()
#切到摄像机
browser.switch_to_frame("mainFrameContent")
browser.find_element_by_xpath("html/body/div[2]/ul/li[2]/a").click()
time.sleep(2)
#选择添加
browser.switch_to_frame("mainFrameContent")
browser.find_element_by_xpath("html/body/div[1]/div[2]/div[1]/div[2]/button[1]").click()
#进入添加界面
browser.switch_to_default_content()
time.sleep(2)
browser.switch_to_frame("mainFrameContent")
browser.switch_to_frame("mainForm")
#设备类型选择IPC
browser.find_element_by_id("ipcRadio").click()
# browser.find_element_by_xpath("html/body/div[1]/div[2]/div/div[1]/dl/dd[1]/label[3]").click()
#cammerName
browser.find_element_by_xpath("html/body/div[1]/div[2]/div/div[1]/dl/dd[3]/input").click()
browser.find_element_by_xpath("html/body/div[1]/div[2]/div/div[1]/dl/dd[3]/input").send_keys(i)
#厂商
chang = browser.find_element_by_xpath(".//select[@id='VENDORID']")
Select(chang).select_by_value('1')
#存储空间
store = browser.find_element_by_xpath(".//select[@id='STOREID']")
Select(store).select_by_value('1')
#转发路由
vdu_route_id = browser.find_element_by_xpath(".//select[@id='VDU_ROUTE_ID']")
Select(vdu_route_id).select_by_value('1')
#用户名
browser.find_element_by_id("USERNAME").click()
browser.find_element_by_id("USERNAME").send_keys("admin")
#密码
browser.find_element_by_id("PASSWORD").click()
browser.find_element_by_id("PASSWORD").send_keys("123456")
#设备ip
browser.find_element_by_id("SERVERIP").click()
browser.find_element_by_id("SERVERIP").send_keys("192.168.68.21")
#端口
browser.find_element_by_id("PORT").click()
browser.find_element_by_id("PORT").send_keys("80")
#码流类型
STREAMTYPE = browser.find_element_by_xpath(".//select[@id='STREAMTYPE']")
Select(STREAMTYPE).select_by_value('0')
#关联PG模块
PG_MODULE_ID = browser.find_element_by_xpath(".//select[@id='PG_MODULE_ID']")
Select(PG_MODULE_ID).select_by_value('EC6CB38DBE4524842101')
#连接协议
CONN_PROTOCAL = browser.find_element_by_xpath(".//select[@id='CONN_PROTOCAL']")
Select(CONN_PROTOCAL).select_by_value('2')
#传输协议
TRANS_MODE = browser.find_element_by_xpath(".//select[@id='TRANS_MODE']")
Select(TRANS_MODE).select_by_value('1')
#HTTP端口
browser.find_element_by_id("HTTPPORT").click()
browser.find_element_by_id("HTTPPORT").send_keys("8")
#RTSP端口
browser.find_element_by_id("RTSPPORT").click()
browser.find_element_by_id("RTSPPORT").send_keys("5")
#取流协议
STREAM_PROTOCAL = browser.find_element_by_xpath(".//select[@id='STREAM_PROTOCAL']")
Select(STREAM_PROTOCAL).select_by_value('1')
#产品型号
browser.find_element_by_xpath("html/body/div[1]/div[2]/div/div[1]/dl/dd[47]/input").click()
browser.find_element_by_xpath("html/body/div[1]/div[2]/div/div[1]/dl/dd[47]/input").send_keys("123")
#点击保存
browser.find_element_by_id("submitBtn").click()
time.sleep(3)
#browser.quit()