import argparse
import logging
import psycopg2
import datetime,time
import os,sys
from selenium import webdriver
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support.ui import Select
from concurrent import futures logging.basicConfig(level=logging.INFO, format='%(asctime)s-[%(filename)s:%(lineno)s]-[%(threadName)s]- %(message)s',datefmt='%a, %d %b %Y %H:%M:%S')
pool = futures.ThreadPoolExecutor(max_workers=10)
WAIT_TIME=30 def query_postgres(all_args,sql):
pg_conn=None
try:
pg_conn = psycopg2.connect(database=all_args.database, user=all_args.user, password=all_args.password, host=all_args.host, port=all_args.port)
cur = pg_conn.cursor()
cur.execute(sql)
return cur.fetchall()
except Exception as e:
logging.error("Query Postgresql Failed , %s",e)
finally:
if pg_conn:
pg_conn.close() def get_org_user_list(all_args):
if not all_args.org:
orgIds=[r[0] for r in query_postgres(all_args,"""select (info->>'_id') as orgId from "sxacc-organizations" ;""")]
else:
orgIds=all_args.org.split(',')
#logging.info("Need Verify Orgs: %s",orgIds)
sql="select username,organization_id from calixuser where organization_id in ("+(','.join(r for r in orgIds))+") and (username like 'mig-admin@%' or username like 'implementation@%'); "
result=[]
org_map={}
for r in query_postgres(all_args,sql):
if not org_map.has_key(r[1]):
result.append({"orgId":str(r[1]),"username":r[0],"password":("Migration%s"%r[1] if str(r[0]).startswith("mig-admin") else "Impl%s"%r[1])})
org_map[r[1]]=r[0]
return result def screen_shapshoot(driver,orgId,name,str_date):
screen_dir=os.path.join("screen",str_date)
if not os.path.isdir("screen"):
os.mkdir("screen")
if not os.path.isdir(screen_dir):
os.mkdir(screen_dir)
screen_dir=os.path.join("screen",str_date,str(orgId))
if not os.path.isdir(screen_dir):
os.mkdir(screen_dir)
file_name=os.path.join(screen_dir,"%s.png"%(name))
driver.get_screenshot_as_file(file_name) def get_call_adv_reports(driver,orgId,str_date):
driver.get("https://xxx/support/")
locator = (By.ID, "netops")
WebDriverWait(driver, WAIT_TIME).until(EC.presence_of_element_located(locator))
time.sleep(5)
try:
driver.find_element_by_id('reportops').click()
i=0
for s in driver.find_elements_by_class_name('report-summary'):
name=driver.find_elements_by_class_name('name')[i].text
s.click()
time.sleep(10)
screen_shapshoot(driver,orgId,'call_adv_%s'%str(name).lstrip(),str_date)
i+=1
except Exception as e:
logging.error("call adv error, %s",e)
logging.error("org %s has no call adv report",orgId) def get_checked_device(driver,orgId,str_date):
driver.find_element_by_id('netops').click()
driver.find_element_by_id('deviceReports').click()
s1=Select(driver.find_element_by_id('device_report_type'))
s1.select_by_value("checkInDeviceReport")
s2=Select(driver.find_element_by_id('time_period'))
s2.select_by_value("1")
driver.find_element_by_id('query-report-btn').click()
locator = (By.TAG_NAME, "th")
WebDriverWait(driver, WAIT_TIME).until(EC.presence_of_element_located(locator))
screen_shapshoot(driver,orgId,"DeviceReportList",str_date)
sn=driver.find_element_by_class_name('serialnumber').text
driver.get("https://xxx/support/cpe-troubleshooting?serialNumber=%s"%sn)
locator=(By.CLASS_NAME,"table-responsive")
WebDriverWait(driver,WAIT_TIME).until(EC.presence_of_element_located(locator))
locator=(By.CLASS_NAME,"fa-spinner")
WebDriverWait(driver,WAIT_TIME).until_not(EC.presence_of_element_located(locator))
time.sleep(5)
screen_shapshoot(driver,orgId,'cpeTroubleshooting',str_date)
driver.find_element_by_id('ccl_support_smartcheck_tab').click()
locator=(By.CLASS_NAME,"smartcheck-btn-details")
WebDriverWait(driver,WAIT_TIME).until(EC.presence_of_element_located(locator))
locator=(By.CLASS_NAME,"fa-spinner")
WebDriverWait(driver,WAIT_TIME).until_not(EC.presence_of_element_located(locator))
try:
for s in driver.find_elements_by_class_name('refresh'):
s.click()
time.sleep(5)
time.sleep(10)
locator=(By.CLASS_NAME,"fa-spinner")
WebDriverWait(driver,WAIT_TIME).until_not(EC.presence_of_element_located(locator))
screen_shapshoot(driver,orgId,'smartcheck',str_date)
for i in range(0,4):
print driver.find_elements_by_class_name('type')[i].text
if i<3:
driver.find_elements_by_class_name('smartcheck-btn-details')[i].click()
else:
driver.find_elements_by_class_name('smartcheck-btn-details')[2].click()
time.sleep(10)
screen_shapshoot(driver,orgId,'smartcheck_%s'%str(driver.find_elements_by_class_name('type')[i].text).lstrip(),str_date)
driver.find_element_by_id("detail-close").click()
except Exception as e:
logging.error("refresh smart check failed,%s",e) def verify_csc_details(driver,orgId,str_date):
get_checked_device(driver,orgId,str_date)
get_call_adv_reports(driver,orgId,str_date) def close_terms_of_service_page(driver):
try:
driver.find_element_by_class_name('close').click()
except Exception as e:
logging.error("Close Button not exists") def test_cmc_functions(driver,orgId,str_date):
driver.get("https://xxx/marketing/insights")
WebDriverWait(driver, WAIT_TIME).until(EC.title_contains("Marketing"))
close_terms_of_service_page(driver)
time.sleep(5)
for item in ['past_28_days','past_month','past_2_months']:
driver.find_element_by_id(item).click()
time.sleep(10)
screen_shapshoot(driver,orgId,'cmc_insights_%s'%item,str_date)
return def test_cloud_login(orgId,username,password,str_date,driver):
driver.get("https://calixcloud.calix.com/login")
driver.find_element_by_name('userName').send_keys(username)
driver.find_element_by_name('password').send_keys(password)
driver.find_element_by_class_name('btn').click()
try:
WebDriverWait(driver, WAIT_TIME).until(EC.title_contains("Support"))
close_terms_of_service_page(driver)
locator = (By.ID, "netops")
WebDriverWait(driver, WAIT_TIME).until(EC.presence_of_element_located(locator))
screen_shapshoot(driver,orgId,"Login_Success",str_date)
logging.info("org:%s verify Successed",orgId)
except Exception as e:
screen_shapshoot(driver,orgId,"Login_Faild",str_date)
logging.error("Login to org: %s failed , exception: %s",orgId,e)
logging.error("org:%s verify Failed",orgId) def test_cloud(orgId,username,password,str_date):
logging.info("Begin verify org:%s",orgId)
driver = webdriver.Firefox()
#driver = webdriver.Chrome()
try:
test_cloud_login(orgId,username,password,str_date,driver)
verify_csc_details(driver,orgId,str_date)
test_cmc_functions(driver,orgId,str_date)
except Exception as e:
logging.error("test cloud faild :%s",e)
finally:
driver.close()
return def main():
parser = argparse.ArgumentParser()
parser.add_argument('-d', '--database', help='database for postgres', default='postgres')
parser.add_argument('-u', '--user', help='user for postgres', default='postgres')
parser.add_argument('-p', '--password', help='password for postgres', default='postgres')
parser.add_argument('-n', '--host', help='host for postgres', default='127.0.0.1')
parser.add_argument('-P', '--port', help='port for postgres', default='5432')
parser.add_argument('-o', '--org', help="orgs list,split by ,")
all_args = parser.parse_args() pool = futures.ThreadPoolExecutor(max_workers=3)
#driver = webdriver.Firefox()
#all_args.org='7583'
for i in range(1):
str_date=datetime.datetime.now().strftime('%Y_%m_%d_%H_%M_%S')
for r in get_org_user_list(all_args):
#test_csc_functions(r['orgId'],r['username'],r['password'],str_date,driver)
pool.submit(test_cloud,r['orgId'],r['username'],r['password'],str_date)
time.sleep(60) if __name__ == '__main__':
main()

  

利用selenium自动化测试样例一的更多相关文章

  1. 利用Selenium自动化测试android wap页

    http://blogs.360.cn/360qtest/2014/04/01/%E5%88%A9%E7%94%A8selenium%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5% ...

  2. Android利用Volley异步载入数据完整具体演示样例(二)

    MainActivity例如以下: package cc.y; import android.app.Activity; import android.content.Context; import ...

  3. Qt 鼠标样式特效探索样例(一)——利用时间器调用QWidget.move()函数

    Qt 鼠标样式特效探索样例(一)       心血来潮,突然想在Qt里玩一把鼠标样式,想到在浏览网页时,经常看到漂亮的鼠标动画,于是今天摸索着乱写个粗糙的demo,来满足自己的好奇心. 效果图 方案要 ...

  4. 【阿菜做实践】利用go语言写一个简单的Pow样例

    本篇博客的主要内容是用go写一个简单的Proof-of-Work共识机制,不涉及到网络通信环节,只是一个本地的简单demo.开发IDE用的是JB Golang. 整个项目的文件结构如下: PoWdem ...

  5. 利用Selenium自动化web测试

    简介: Selenium 是一个没有正式指导手册的开源项目,这让测试人员的问题调查很费时间.本文为基于 Selenium 1.0(发布于 2009 年 6 月)的测试期间的常见问题提供最佳实践. 简介 ...

  6. [持续交付实践] pipeline使用:项目样例

    项目说明 本文将以一个微服务项目的具体pipeline样例进行脚本编写说明.一条完整的pipeline交付流水线通常会包括代码获取.单元测试.静态检查.打包部署.接口层测试.UI层测试.性能专项测试( ...

  7. Selenium自动化测试框架入门整理

    ​​关注嘉为科技,获取运维新知 本文主要针对Selenium自动化测试框架入门整理,只涉及总体功能及框架要点介绍说明,以及使用前提技术基础要求整理说明.作为开发人员.测试人员入门参考. 本文参考:Se ...

  8. Selenium自动化测试Python五:WebDriver设计模式

    WebDriver 设计模式 欢迎阅读WebDriver进阶讲义.本篇讲义将会重点介绍Selenium WebDriver 自动化框架的设计,着重使用Page Object设计模式,以及使用HTML测 ...

  9. Selenium自动化测试Python一:Selenium入门

    Selenium入门 欢迎阅读Selenium入门讲义,本讲义将会重点介绍Selenium的入门知识以及Selenium的前置知识. 自动化测试的基础 在Selenium的课程以前,我们先回顾一下软件 ...

随机推荐

  1. mysql left join 右表数据不唯一的情况解决方法

    mysql left join 右表数据不唯一的情况解决方法 <pre>member 表id username1 fdipzone2 terry member_login_log 表id ...

  2. Google BERT

    概述 BERT的全称是Bidirectional Encoder Representation from Transformers,即双向Transformer的Encoder,因为decoder是不 ...

  3. git将代码提交到多个远程仓库

    在项目目录下执行: git remote set-url --add origin http://mayun.cn/xxx/adsdsdsdcelery-demo.git 即可添加一个远程仓库. 再执 ...

  4. JDBC缓冲池配置druid.properties

    driverClassName=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3306/mytest?characterEncoding=UTF-8 ...

  5. C++Primer 5th Chap10 Generic Algorithms(未完)

    大多数算法定义在头文件algorithm中,在头文件numeric中定义了数值泛型算法. 以find算法为例:在容器的两个迭代器指定的范围内遍历,查找特定值. auto result= cout< ...

  6. python 之 前端开发(CSS三大特性、字体属性、文本属性、背景属性)

    11.38 css三大特性 11.381 继承性 1.定义:给某一个元素设置一些属性,该元素的后代也可以使用,这个我们就称之为继承性​2.注意:    1.只有以color.font-.text-.l ...

  7. 05 多继承、object类

    多继承 Python中一个类可以继承多个父类,并且获得全部父类的属性和方法. class A: def demo(self): print("demo") class B: def ...

  8. wx.request 请求

    wx.request 1.wx.request相当于ajax请求,和django后台进行交互 官方文档:https://developers.weixin.qq.com/miniprogram/dev ...

  9. PAT(B) 1089 狼人杀-简单版(Java)逻辑推理

    题目链接:1089 狼人杀-简单版 (20 point(s)) 题目描述 以下文字摘自<灵机一动·好玩的数学>:"狼人杀"游戏分为狼人.好人两大阵营.在一局" ...

  10. PB计算两个日期相差月份(计算工龄)

    ll_intime_y = year(date(this.object.in_factory_day[row])) ll_intime_m = month(date(this.object.in_fa ...