Commit 94b0d37a authored by qianyanyan's avatar qianyanyan

copy gt

parent 44ef3d5a
znfz_autotest
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.6 " project-jdk-type="Python SDK" />
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/znfz_autotest.iml" filepath="$PROJECT_DIR$/.idea/znfz_autotest.iml" />
</modules>
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$" vcs="Git" />
</component>
</project>
\ No newline at end of file
This diff is collapsed.
<?xml version="1.0" encoding="UTF-8"?>
<module type="PYTHON_MODULE" version="4">
<component name="NewModuleRootManager">
<content url="file://$MODULE_DIR$">
<excludeFolder url="file://$MODULE_DIR$/venv" />
</content>
<orderEntry type="jdk" jdkName="Python 3.6 " jdkType="Python SDK" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
<component name="PackageRequirementsSettings">
<option name="requirementsPath" value="" />
</component>
<component name="TestRunnerService">
<option name="projectConfiguration" value="py.test" />
<option name="PROJECT_TEST_RUNNER" value="py.test" />
</component>
</module>
\ No newline at end of file
from .browser_engine import BrowserEngine
import os
def get_engine(file, url):
def inner(f):
def wapper(*args, **kwargs):
try:
if file:
log_name = os.path.split(file)[-1].split(".")[0]
engine = BrowserEngine(log_name, url)
else:
engine = BrowserEngine(url=url)
ret = f(engine, *args, **kwargs)
if engine.driver: engine.driver.quit()
if engine: del engine
return ret
except Exception as e:
print(e)
return wapper
return inner
import sys
import time
from basepage.browser_engine import BrowserEngine
from basepage.logger import Logger
from basepage.read_config import ReadConfig
class CheckGsjd(BrowserEngine):
__log_name = 'check_gsjd'
def __init__(self, log_name=__log_name):
super().__init__(log_name)
self._driver = self.login_znfz()
# 选择审查起诉
def choose_gsjd(self):
# tags = driver.find_element_by_xpath('/html/body/div[1]/div/section/aside/div/ul/li[3]/a/span')
tags = self._driver.find_element_by_xpath('/html/body/div[1]/div/section/aside/div/ul/li[3]')
# print(tags.text)
self.logger.info("tags.text:%s" % tags.text)
tags.click()
time.sleep(10)
return self._driver
# 选择审查起诉案件
# def choose_gsjd_case(self):
# caseId = self.get_caseId('caseId')
# self.logger.info("the caseId : %s" % caseId)
# # driver.find_element_by_xpath('/html/body/div[1]/div/section/section/main/div/div[2]/div/div/div[1]/form/div[1]/div[3]/input').send_keys(caseId)
# self._driver.find_element_by_xpath('//*[@id="ajmc"]').send_keys(caseId)
# # 点击按钮
# self._driver.find_element_by_xpath(
# '/html/body/div[1]/div/section/section/main/div/div[2]/div/div/div[1]/form/div[2]/div/button[2]').click()
# time.sleep(5)
# # 点击办理
# tags = self._driver.find_element_by_xpath(
# '/html/body/div[1]/div/section/section/main/div/div[2]/div/div/div[2]/div[2]/div/div/div/div/div/div[2]/table/tbody/tr/td[7]/p/a')
# # print(tags.text)
# self.logger.info("tags.text:%s" % tags.text)
# tags.click()
# driver.find_element_by_tag_name(tags.text).click()
# if __name__ == '__main__':
# test = CheckGsjd()
# driver = test.choose_gsjd()
# test.choose_gsjd_case(driver)
# '''
# conf = ReadConfig()
# caseId = conf.get_caseId('caseId')
# logger.info("the caseId : %s" % caseId)
# # driver.find_element_by_xpath('/html/body/div[1]/div/section/section/main/div/div[2]/div/div/div[1]/form/div[1]/div[3]/input').send_keys(caseId)
# driver.find_element_by_xpath('//*[@id="ajmc"]').send_keys(caseId)
# # 点击按钮
# driver.find_element_by_xpath(
# '/html/body/div[1]/div/section/section/main/div/div[2]/div/div/div[1]/form/div[2]/div/button[2]').click()
# # 点击办理
# #tags = driver.find_element_by_xpath('/html/body/div[1]/div/section/section/main/div/div[2]/div/div/div[2]/div[2]/div/div/div/div/div/div[2]/table/tbody/tr/td[7]/p/a')
# time.sleep(5)
# tags = driver.find_element_by_xpath('/html/body/div[1]/div/section/section/main/div/div[2]/div/div/div[2]/div[2]/div/div/div/div/div/div[2]/table/tbody/tr/td[3]/p/span')
# print(tags.text)
# tags.click()
# #links = driver.find_element_by_tag_name("办理")
# #print(links.text)
# #tags.click()
# #print (tags.text)
# #tags.click()
# '''
import sys
import time
from basepage.browser_engine import BrowserEngine
from basepage.logger import Logger
logger = Logger(logger="check_zcjd").getlog()
class CheckZcjd:
#选择审查逮捕
def choose_zcjd(self):
browser = BrowserEngine()
driver = browser.login_znfz()
tags = driver.find_element_by_xpath('/html/body/div[1]/div/section/aside/div/ul/li[2]/a/span')
#print(tags.text)
logger.info("tags.text;%s" % tags.text)
tags.click()
time.sleep(10)
if __name__ == '__main__':
test = CheckZcjd()
test.choose_zcjd()
\ No newline at end of file
import psycopg2
import json
conn = psycopg2.connect(database = 'cmrobot',user = 'cmrobot', password = 'cmrobot',host = '192.168.2.31',port = '5432')
curs = conn.cursor()
sql = "select jsondata from znfz_wsst_nlp where bmsah = '瓯检起诉受[2020]33030401160号'"
curs.execute(sql)
data = curs.fetchall()
print("python原始数据:",data)
print(type(data))
curs.close()
conn.close()
# this is config file, only store browser type and server URL
[browserType]
#browserName = Firefox
browserName = Chrome
#browserName = IE
[testUrl]
#URL = https://www.baidu.com
;URL = http://192.168.2.31/cm
URL = http://2u8997d500.zicp.vip:46630/cm
JBAQ_URL = http://2u8997d500.zicp.vip:46630/cm/currencydeal/{bmsah}/case?bmsah={bmsah}
SCJL_URL = http://2u8997d500.zicp.vip:46630/cm/currencydeal/{bmsah}/conclusion?bmsah={bmsah}&stage=GS&tysah=33030420200123700&ysay={ysay}
BD_URL = http://www.baidu.com
;JBAQ_URL = http://192.168.2.31/cm/currencydeal/{bmsah}/case?bmsah={bmsah}
[userInfo]
username=周朝阳
password=qazwsxedc
[dataBase]
ip=192.168.2.31
port=5432
user=cmrobot
pasword=cmrobot
database=cmrobot
#起诉案件
[gsjdCase]
#考虑循环
# 盗窃罪
caseId_dqz=瓯检起诉受[2020]33030400557号
# 故意伤害罪
caseId_gyshz=瓯检起诉受[2020]33030400881号
caseName=陈小秋诈骗案
from engine.browser_engine import BrowserEngine
from engine.read_config import ReadConfig
from engine.logger import Logger
import os,time
def get_engine(file, url):
def inner(f):
def wapper(*args, **kwargs):
try:
start_time = time.time()
log_name = os.path.split(file)[-1].split(".")[0]
image_path = os.path.join(os.path.dirname(os.path.dirname(file)), "images")
image_path = os.path.join(image_path, log_name)
image_path += '.png'
engine = BrowserEngine(image_path, log_name, url.upper())
ret = f(engine, *args, **kwargs)
end_time = time.time()
engine.logger.info(f'执行时间:{end_time-start_time}s')
if engine: del engine
return ret
except Exception as e:
print(e)
return wapper
return inner
# -*- coding:utf-8 -*-
from selenium import webdriver
from engine.read_config import ReadConfig
import time, os, re
class BrowserEngine(ReadConfig):
__log_name = "browser_engine"
def __init__(self, image_path, log_name=__log_name, url='URL'):
super().__init__(log_name)
# self.__logger = super().get_logger()
self._log_name = log_name
self._browser = ''
self.url = url
self._driver_path = r"D:\mywork\autotest\znfz_autotest-develop_gt\driver\chromedriver.exe"
self.image_path = image_path
self.driver = webdriver.Chrome(self._driver_path)
self.open_browser()
self.login_znfz()
self.format_url()
self.driver.xpath = self.driver.find_elements_by_xpath
def open_browser(self):
browser = self.get_browserType('browserName')
url = self.get_testUrl('URL')
self.logger.info("browserName: %s" % browser)
# driver = webdriver.Chrome(r"C:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe")
self.driver.get(url)
self.logger.info("Open url: %s" % url)
time.sleep(1)
self.driver.maximize_window()
self.logger.info("Maximize the current window.")
self.driver.implicitly_wait(10)
self.logger.info("Set implicitly wait 10 seconds.")
return self.driver
def login_znfz(self):
if self.url == 'LOGIN':
return
username = self.get_userInfo('username')
password = self.get_userInfo('password')
self.logger.info("username: %s" % username)
# logger.info(string.Formatter("username: %s, password: %s, open url: %s", username, password, url))
# logger.info("password :%s" % password)
# logger.info("Open url: %s" % url)
tags = self.driver.find_element_by_xpath('//*[@id="root"]/div/div/div[2]/form/div[1]/div/div/span/span/span')
self.logger.info("tags.text:%s" % tags.text)
# print(tags.text)
tags.click()
time.sleep(1)
self.driver.find_element_by_xpath('//*[@id="rc-tree-select-list_1"]/ul/li/ul/li[3]/span[1]').click()
tags2 = self.driver.find_element_by_xpath(
'//*[@id="rc-tree-select-list_1"]/ul/li/ul/li[3]/ul/li[3]/span[2]/span')
self.logger.info("tags2.text:%s" % tags2.text)
# print(tags2.text)
tags2.click()
time.sleep(1)
self.driver.find_element_by_xpath('//*[@id="username"]').send_keys(username)
self.driver.find_element_by_xpath('//*[@id="password"]').send_keys(password)
self.driver.find_element_by_xpath('//*[@id="root"]/div/div/div[2]/form/div[4]/div/div/span/button').click()
return self.driver
def format_url(self):
url = self.get_testUrl(self.url)
if '{' in url:
self.daoqiezui_url = url.format(bmsah=self.get_caseId('caseId_dqz'),ysay='盗窃罪')
self.guyishanghaizui_url = url.format(bmsah=self.get_caseId('caseId_gyshz'),ysay='故意伤害罪')
self.DQZ = self.daoqiezui_url
self.GYSHZ = self.guyishanghaizui_url
def get_page(self,url):
self.logger.info("the testUrl : %s" % url)
self.driver.get(url)
# def load_image(self):
# print(self.image_path)
# image_dir, image_name = os.path.split(self.image_path)
# image_list = os.listdir(image_dir)
# if image_name in image_list:
# image_name_list = list(filter(lambda x: re.findall(image_name + r'-\d{1,}\.png', x), image_list))
# image_name_index_list = list(map(lambda x: int(x.split('-|.')[-2]) if '-' in x else 0, image_name_list))
# next_image_name_index = max(image_name_index_list) + 1 if image_name_index_list else 1
# next_image_name = os.path.join(image_dir, image_name.replace('.png', f'-{next_image_name_index}.png'))
# else:
# next_image_name = self.image_path
# print(next_image_name)
# self.driver.get_screenshot_as_file(next_image_name)
def __del__(self):
try:
self.driver.quit()
except:
pass
'''
if __name__ == '__main__':
cls = BrowserEngine()
test = cls.open_browser()
time.sleep(3)
test.quit()
'''
import os.path
import logging
import time
class Logger(object):
def __init__(self, log_name, *args, **kwargs):
super().__init__(*args, **kwargs)
self.log_name = log_name
self.logger = logging.getLogger(log_name)
self.logger.handlers = []
self.init_logger()
def init_logger(self):
self.logger.setLevel(logging.DEBUG)
rq = time.strftime('%Y%m%d', time.localtime(time.time()))
log_path = os.path.dirname(os.path.abspath('..')) + '/logs/'
log_name = log_path + rq + '.log'
fh = logging.FileHandler(log_name)
fh.setLevel(logging.INFO)
ch = logging.StreamHandler()
ch.setLevel(logging.INFO)
formatter = logging.Formatter(f'[%(asctime)s] - [%(levelname)7s] - [%(name){max(len(self.log_name),15)}s] - [%(filename)20s] - [%(lineno)4s] - %(message)s')
fh.setFormatter(formatter)
ch.setFormatter(formatter)
self.logger.addHandler(fh)
self.logger.addHandler(ch)
def get_logger(self):
return self.logger
import os
import configparser
from engine.logger import Logger
'''
proDir = os.path.split(os.path.realpath(__file__))[0]
print(proDir)
configPath = os.path.join(proDir, "config.ini")
print(configPath)
'''
# logger = logging.getLogger('read_config')
class ReadConfig(Logger):
__log_name = 'read_config'
def __init__(self, log_name=__log_name):
super().__init__(log_name)
self._configPath = ''
self.join_config_path()
self.cf = configparser.ConfigParser()
self.cf.read(self._configPath, encoding="utf-8-sig")
def join_config_path(self):
# proDir = os.path.dirname(os.path.abspath('.'))
self._configPath = os.path.dirname(os.path.abspath('..')) + r'\config\config.ini'
self.logger.info("the configPath: %s" % self._configPath)
def get_browserType(self, param):
value = self.cf.get("browserType", param)
self.logger.info("the browserType : %s" % value)
return value
def get_testUrl(self, param):
value = self.cf.get("testUrl", param)
# self.logger.info("the testUrl : %s" % value)
return value
def get_userInfo(self, param):
value = self.cf.get("userInfo", param)
self.logger.info("the userInfo : %s" % value)
return value
def get_caseId(self, param):
value = self.cf.get("gsjdCase", param)
self.logger.info("the gsjdCase : %s" % value)
return value
'''
if __name__ == '__main__':
test = ReadConfig()
browser = test.get_browserType('browserName')
username = test.get_userInfo('username')
password = test.get_userInfo('password')
print(browser,username,password)
'''
2020-06-10 15:22:08,642 - read_config - INFO - the configPath: D:\mywork\autotest\znfz_autotest\config\config.ini
2020-06-10 15:22:08,664 - read_config - INFO - the userInfo : 周朝阳
2020-06-10 15:22:08,664 - read_config - INFO - the userInfo : qazwsxedc
2020-06-10 15:22:08,664 - read_config - INFO - the testUrl : http://192.168.2.31/cm
2020-06-10 15:22:08,665 - browser_engine - INFO - username: 周朝阳
2020-06-10 15:22:08,666 - read_config - INFO - the browserType : Chrome
2020-06-10 15:22:08,666 - read_config - INFO - the testUrl : http://192.168.2.31/cm
2020-06-10 15:22:08,667 - browser_engine - INFO - browserName: Chrome
2020-06-10 15:22:44,094 - browser_engine - INFO - Open url: http://192.168.2.31/cm
2020-06-10 15:22:51,233 - browser_engine - INFO - Maximize the current window.
2020-06-10 15:22:51,235 - browser_engine - INFO - Set implicitly wait 10 seconds.
2020-06-10 15:22:51,280 - browser_engine - INFO - tags.text:请选择所属部门
2020-06-10 15:22:52,624 - browser_engine - INFO - tags2.text:瓯海区院
2020-06-10 15:23:01,896 - check_gsjd - INFO - tags.text:审查起诉
2020-06-10 15:23:12,050 - read_config - INFO - the gsjdCase : 33030401160
2020-06-10 15:23:12,050 - check_gsjd - INFO - the caseId : 33030401160
2020-06-10 15:23:17,670 - check_gsjd - INFO - tags.text:办理
This diff is collapsed.
[2020-08-17 09:39:03,496] - [ INFO] - [ test_login] - [ read_config.py] - [ 29] - the configPath: D:\mywork\autotest\znfz_autotest-develop_gt\config\config.ini
[2020-08-17 09:39:09,772] - [ INFO] - [ test_login] - [ read_config.py] - [ 33] - the browserType : Chrome
[2020-08-17 09:39:09,772] - [ INFO] - [ test_login] - [ browser_engine.py] - [ 28] - browserName: Chrome
[2020-08-17 09:39:25,267] - [ INFO] - [ test_login] - [ browser_engine.py] - [ 33] - Open url: http://2u8997d500.zicp.vip:46630/cm
[2020-08-17 09:39:28,414] - [ INFO] - [ test_login] - [ browser_engine.py] - [ 36] - Maximize the current window.
[2020-08-17 09:39:28,418] - [ INFO] - [ test_login] - [ browser_engine.py] - [ 38] - Set implicitly wait 10 seconds.
[2020-08-17 09:39:28,425] - [ INFO] - [ test_login] - [ read_config.py] - [ 29] - the configPath: D:\mywork\autotest\znfz_autotest-develop_gt\config\config.ini
[2020-08-17 09:39:33,982] - [ INFO] - [ test_login] - [ read_config.py] - [ 33] - the browserType : Chrome
[2020-08-17 09:39:33,982] - [ INFO] - [ test_login] - [ browser_engine.py] - [ 28] - browserName: Chrome
[2020-08-17 09:39:46,854] - [ INFO] - [ test_login] - [ browser_engine.py] - [ 33] - Open url: http://2u8997d500.zicp.vip:46630/cm
[2020-08-17 09:39:49,995] - [ INFO] - [ test_login] - [ browser_engine.py] - [ 36] - Maximize the current window.
[2020-08-17 09:39:49,998] - [ INFO] - [ test_login] - [ browser_engine.py] - [ 38] - Set implicitly wait 10 seconds.
[2020-08-17 09:39:50,002] - [ INFO] - [ test_login] - [ read_config.py] - [ 29] - the configPath: D:\mywork\autotest\znfz_autotest-develop_gt\config\config.ini
[2020-08-17 09:39:53,696] - [ INFO] - [ test_login] - [ read_config.py] - [ 33] - the browserType : Chrome
[2020-08-17 09:39:53,697] - [ INFO] - [ test_login] - [ browser_engine.py] - [ 28] - browserName: Chrome
[2020-08-17 09:40:06,421] - [ INFO] - [ test_login] - [ browser_engine.py] - [ 33] - Open url: http://2u8997d500.zicp.vip:46630/cm
[2020-08-17 09:40:09,573] - [ INFO] - [ test_login] - [ browser_engine.py] - [ 36] - Maximize the current window.
[2020-08-17 09:40:09,577] - [ INFO] - [ test_login] - [ browser_engine.py] - [ 38] - Set implicitly wait 10 seconds.
body {
font-family: Helvetica, Arial, sans-serif;
font-size: 12px;
/* do not increase min-width as some may use split screens */
min-width: 800px;
color: #999;
}
h1 {
font-size: 24px;
color: black;
}
h2 {
font-size: 16px;
color: black;
}
p {
color: black;
}
a {
color: #999;
}
table {
border-collapse: collapse;
}
/******************************
* SUMMARY INFORMATION
******************************/
#environment td {
padding: 5px;
border: 1px solid #E6E6E6;
}
#environment tr:nth-child(odd) {
background-color: #f6f6f6;
}
/******************************
* TEST RESULT COLORS
******************************/
span.passed, .passed .col-result {
color: green;
}
span.skipped, span.xfailed, span.rerun, .skipped .col-result, .xfailed .col-result, .rerun .col-result {
color: orange;
}
span.error, span.failed, span.xpassed, .error .col-result, .failed .col-result, .xpassed .col-result {
color: red;
}
/******************************
* RESULTS TABLE
*
* 1. Table Layout
* 2. Extra
* 3. Sorting items
*
******************************/
/*------------------
* 1. Table Layout
*------------------*/
#results-table {
border: 1px solid #e6e6e6;
color: #999;
font-size: 12px;
width: 100%
}
#results-table th, #results-table td {
padding: 5px;
border: 1px solid #E6E6E6;
text-align: left
}
#results-table th {
font-weight: bold
}
/*------------------
* 2. Extra
*------------------*/
.log:only-child {
height: inherit
}
.log {
background-color: #e6e6e6;
border: 1px solid #e6e6e6;
color: black;
display: block;
font-family: "Courier New", Courier, monospace;
height: 230px;
overflow-y: scroll;
padding: 5px;
white-space: pre-wrap
}
div.image {
border: 1px solid #e6e6e6;
float: right;
height: 240px;
margin-left: 5px;
overflow: hidden;
width: 320px
}
div.image img {
width: 320px
}
div.video {
border: 1px solid #e6e6e6;
float: right;
height: 240px;
margin-left: 5px;
overflow: hidden;
width: 320px
}
div.video video {
overflow: hidden;
width: 320px;
height: 240px;
}
.collapsed {
display: none;
}
.expander::after {
content: " (show details)";
color: #BBB;
font-style: italic;
cursor: pointer;
}
.collapser::after {
content: " (hide details)";
color: #BBB;
font-style: italic;
cursor: pointer;
}
/*------------------
* 3. Sorting items
*------------------*/
.sortable {
cursor: pointer;
}
.sort-icon {
font-size: 0px;
float: left;
margin-right: 5px;
margin-top: 5px;
/*triangle*/
width: 0;
height: 0;
border-left: 8px solid transparent;
border-right: 8px solid transparent;
}
.inactive .sort-icon {
/*finish triangle*/
border-top: 8px solid #E6E6E6;
}
.asc.active .sort-icon {
/*finish triangle*/
border-bottom: 8px solid #999;
}
.desc.active .sort-icon {
/*finish triangle*/
border-top: 8px solid #999;
}
body {
font-family: Helvetica, Arial, sans-serif;
font-size: 12px;
/* do not increase min-width as some may use split screens */
min-width: 800px;
color: #999;
}
h1 {
font-size: 24px;
color: black;
}
h2 {
font-size: 16px;
color: black;
}
p {
color: black;
}
a {
color: #999;
}
table {
border-collapse: collapse;
}
/******************************
* SUMMARY INFORMATION
******************************/
#environment td {
padding: 5px;
border: 1px solid #E6E6E6;
}
#environment tr:nth-child(odd) {
background-color: #f6f6f6;
}
/******************************
* TEST RESULT COLORS
******************************/
span.passed, .passed .col-result {
color: green;
}
span.skipped, span.xfailed, span.rerun, .skipped .col-result, .xfailed .col-result, .rerun .col-result {
color: orange;
}
span.error, span.failed, span.xpassed, .error .col-result, .failed .col-result, .xpassed .col-result {
color: red;
}
/******************************
* RESULTS TABLE
*
* 1. Table Layout
* 2. Extra
* 3. Sorting items
*
******************************/
/*------------------
* 1. Table Layout
*------------------*/
#results-table {
border: 1px solid #e6e6e6;
color: #999;
font-size: 12px;
width: 100%
}
#results-table th, #results-table td {
padding: 5px;
border: 1px solid #E6E6E6;
text-align: left
}
#results-table th {
font-weight: bold
}
/*------------------
* 2. Extra
*------------------*/
.log:only-child {
height: inherit
}
.log {
background-color: #e6e6e6;
border: 1px solid #e6e6e6;
color: black;
display: block;
font-family: "Courier New", Courier, monospace;
height: 230px;
overflow-y: scroll;
padding: 5px;
white-space: pre-wrap
}
div.image {
border: 1px solid #e6e6e6;
float: right;
height: 240px;
margin-left: 5px;
overflow: hidden;
width: 320px
}
div.image img {
width: 320px
}
div.video {
border: 1px solid #e6e6e6;
float: right;
height: 240px;
margin-left: 5px;
overflow: hidden;
width: 320px
}
div.video video {
overflow: hidden;
width: 320px;
height: 240px;
}
.collapsed {
display: none;
}
.expander::after {
content: " (show details)";
color: #BBB;
font-style: italic;
cursor: pointer;
}
.collapser::after {
content: " (hide details)";
color: #BBB;
font-style: italic;
cursor: pointer;
}
/*------------------
* 3. Sorting items
*------------------*/
.sortable {
cursor: pointer;
}
.sort-icon {
font-size: 0px;
float: left;
margin-right: 5px;
margin-top: 5px;
/*triangle*/
width: 0;
height: 0;
border-left: 8px solid transparent;
border-right: 8px solid transparent;
}
.inactive .sort-icon {
/*finish triangle*/
border-top: 8px solid #E6E6E6;
}
.asc.active .sort-icon {
/*finish triangle*/
border-bottom: 8px solid #999;
}
.desc.active .sort-icon {
/*finish triangle*/
border-top: 8px solid #999;
}
from selenium import webdriver
import pytest
# driver = None
# @pytest.mark.hookwrapper
# def pytest_runtest_makereport(item):
# """
# Extends the PyTest Plugin to take and embed screenshot in html report, whenever test fails.
# :param item:
# """
# pytest_html = item.config.pluginmanager.getplugin('html')
# outcome = yield
# report = outcome.get_result()
# extra = getattr(report, 'extra', [])
#
# if report.when == 'call' or report.when == "setup":
# xfail = hasattr(report, 'wasxfail')
# if (report.skipped and xfail) or (report.failed and not xfail):
# file_name = report.nodeid.replace("::", "_")+".png"
# _capture_screenshot(file_name)
# if file_name:
# html = '<div><img src="%s" alt="screenshot" style="width:304px;height:228px;" ' \
# 'οnclick="window.open(this.src)" align="right"/></div>' % file_name
# extra.append(pytest_html.extras.html(html))
# report.extra = extra
#
#
# def _capture_screenshot(name):
# driver.get_screenshot_as_file(name)
#
#
# @pytest.fixture(scope='session', autouse=True)
# def browser():
# global driver
# if driver is None:
# driver = webdriver.Firefox()
# return driver
body {
font-family: Helvetica, Arial, sans-serif;
font-size: 12px;
/* do not increase min-width as some may use split screens */
min-width: 800px;
color: #999;
}
h1 {
font-size: 24px;
color: black;
}
h2 {
font-size: 16px;
color: black;
}
p {
color: black;
}
a {
color: #999;
}
table {
border-collapse: collapse;
}
/******************************
* SUMMARY INFORMATION
******************************/
#environment td {
padding: 5px;
border: 1px solid #E6E6E6;
}
#environment tr:nth-child(odd) {
background-color: #f6f6f6;
}
/******************************
* TEST RESULT COLORS
******************************/
span.passed, .passed .col-result {
color: green;
}
span.skipped, span.xfailed, span.rerun, .skipped .col-result, .xfailed .col-result, .rerun .col-result {
color: orange;
}
span.error, span.failed, span.xpassed, .error .col-result, .failed .col-result, .xpassed .col-result {
color: red;
}
/******************************
* RESULTS TABLE
*
* 1. Table Layout
* 2. Extra
* 3. Sorting items
*
******************************/
/*------------------
* 1. Table Layout
*------------------*/
#results-table {
border: 1px solid #e6e6e6;
color: #999;
font-size: 12px;
width: 100%
}
#results-table th, #results-table td {
padding: 5px;
border: 1px solid #E6E6E6;
text-align: left
}
#results-table th {
font-weight: bold
}
/*------------------
* 2. Extra
*------------------*/
.log:only-child {
height: inherit
}
.log {
background-color: #e6e6e6;
border: 1px solid #e6e6e6;
color: black;
display: block;
font-family: "Courier New", Courier, monospace;
height: 230px;
overflow-y: scroll;
padding: 5px;
white-space: pre-wrap
}
div.image {
border: 1px solid #e6e6e6;
float: right;
height: 240px;
margin-left: 5px;
overflow: hidden;
width: 320px
}
div.image img {
width: 320px
}
div.video {
border: 1px solid #e6e6e6;
float: right;
height: 240px;
margin-left: 5px;
overflow: hidden;
width: 320px
}
div.video video {
overflow: hidden;
width: 320px;
height: 240px;
}
.collapsed {
display: none;
}
.expander::after {
content: " (show details)";
color: #BBB;
font-style: italic;
cursor: pointer;
}
.collapser::after {
content: " (hide details)";
color: #BBB;
font-style: italic;
cursor: pointer;
}
/*------------------
* 3. Sorting items
*------------------*/
.sortable {
cursor: pointer;
}
.sort-icon {
font-size: 0px;
float: left;
margin-right: 5px;
margin-top: 5px;
/*triangle*/
width: 0;
height: 0;
border-left: 8px solid transparent;
border-right: 8px solid transparent;
}
.inactive .sort-icon {
/*finish triangle*/
border-top: 8px solid #E6E6E6;
}
.asc.active .sort-icon {
/*finish triangle*/
border-bottom: 8px solid #999;
}
.desc.active .sort-icon {
/*finish triangle*/
border-top: 8px solid #999;
}
[pytest]
;log_format = %(asctime)s %(levelname)s %(message)s
log_date_format = %Y-%m-%d %H:%M:%S
markers= login
select
addxyr
delxyr
nullxyr
gsjd
reset
basicmatter1
basicmatter
lxfz
lxfz1
demo
This diff is collapsed.
from engine import get_engine
import pytest,time
@pytest.mark.select
@get_engine(__file__,'URL')
def test_full_select(engine):
for i in ['审查逮捕','审查起诉']:
scdb = engine.driver.xpath(f"//span[text()='{i}']/..")[0]
if scdb:
scdb.click()
else:
engine.logger.error(f'{i}元素获取错误')
return
case_id = engine.get_caseId('caseId')
input = engine.driver.xpath("//input[@id='ajmc']")[0]
if input:
input.send_keys(case_id)
else:
engine.logger.error(f'{i}---input元素获取错误')
return
time.sleep(0.5)
select = engine.driver.xpath("//button[@type='submit']")[0]
if select:
select.click()
else:
engine.logger.error(f'{i}---select元素获取错误')
return
time.sleep(1)
anjian_list = engine.driver.xpath("//tbody[@class='ant-table-tbody']/tr")
assert len(anjian_list) == 1 and anjian_list[0].get_attribute('data-row-key') == case_id
@pytest.mark.select
@get_engine(__file__,'URL')
def test_sub_select(engine):
for i in ['审查逮捕','审查起诉']:
scdb = engine.driver.xpath(f"//span[text()='{i}']/..")[0]
if scdb:
scdb.click()
else:
engine.logger.error(f'{i}元素获取错误')
return
case_id = engine.get_caseId('caseId')[11:-2]
input = engine.driver.xpath("//input[@id='ajmc']")[0]
if input:
input.send_keys(case_id)
else:
engine.logger.error(f'{i}---input元素获取错误')
return
time.sleep(0.5)
select = engine.driver.xpath("//button[@type='submit']")[0]
if select:
select.click()
else:
engine.logger.error(f'{i}---select元素获取错误')
return
time.sleep(1)
anjian_list = engine.driver.xpath("//tbody[@class='ant-table-tbody']/tr")
assert len(anjian_list) == 1 and case_id in anjian_list[0].get_attribute('data-row-key')
@pytest.mark.select
@get_engine(__file__,'URL')
def test_null_select(engine):
for i in ['审查逮捕','审查起诉']:
scdb = engine.driver.xpath(f"//span[text()='{i}']/..")[0]
if scdb:
scdb.click()
else:
engine.logger.error(f'{i}元素获取错误')
return
case_id = engine.get_caseId('caseId')[11:-2]
anjian_list = [anjian.get_attribute('data-row-key') for anjian in engine.driver.xpath("//tbody[@class='ant-table-tbody']/tr")]
select = engine.driver.xpath("//button[@type='submit']")[0]
if select:
select.click()
else:
engine.logger.error(f'{i}---select元素获取错误')
return
time.sleep(1)
new_anjian_list = [anjian.get_attribute('data-row-key') for anjian in engine.driver.xpath("//tbody[@class='ant-table-tbody']/tr")]
assert new_anjian_list == anjian_list
@pytest.mark.select
@get_engine(__file__,'URL')
def test_fullname_select(engine):
for i in ['审查逮捕','审查起诉']:
scdb = engine.driver.xpath(f"//span[text()='{i}']/..")[0]
if scdb:
scdb.click()
else:
engine.logger.error(f'{i}元素获取错误')
return
case_name = engine.get_caseId('caseName')
input = engine.driver.xpath("//input[@id='ajmc']")[0]
if input:
input.send_keys(case_name)
else:
engine.logger.error(f'{i}---input元素获取错误')
return
time.sleep(0.5)
select = engine.driver.xpath("//button[@type='submit']")[0]
if select:
select.click()
else:
engine.logger.error(f'{i}---select元素获取错误')
return
time.sleep(1)
anjian_name = engine.driver.xpath("//tbody[@class='ant-table-tbody']/tr/td/p/span[@class='bg___2A-Dw']")[0].text
assert anjian_name == case_name
@pytest.mark.select
@get_engine(__file__,'URL')
def test_subname_select(engine):
for i in ['审查逮捕','审查起诉']:
scdb = engine.driver.xpath(f"//span[text()='{i}']/..")[0]
if scdb:
scdb.click()
else:
engine.logger.error(f'{i}元素获取错误')
return
case_name = engine.get_caseId('caseName')[:3]
input = engine.driver.xpath("//input[@id='ajmc']")[0]
if input:
input.send_keys(case_name)
else:
engine.logger.error(f'{i}---input元素获取错误')
return
time.sleep(0.5)
select = engine.driver.xpath("//button[@type='submit']")[0]
if select:
select.click()
else:
engine.logger.error(f'{i}---select元素获取错误')
return
time.sleep(1)
anjian_name = engine.driver.xpath("//tbody[@class='ant-table-tbody']/tr/td/p/span[@class='bg___2A-Dw']")[0].text
assert case_name in anjian_name
@pytest.mark.select
@get_engine(__file__,'URL')
def test_errname_select(engine):
for i in ['审查逮捕','审查起诉']:
scdb = engine.driver.xpath(f"//span[text()='{i}']/..")[0]
if scdb:
scdb.click()
else:
engine.logger.error(f'{i}元素获取错误')
return
# case_name = engine.get_caseId('caseName')[:3]
input = engine.driver.xpath("//input[@id='ajmc']")[0]
if input:
input.send_keys('aaa')
else:
engine.logger.error(f'{i}---input元素获取错误')
return
time.sleep(0.5)
select = engine.driver.xpath("//button[@type='submit']")[0]
if select:
select.click()
else:
engine.logger.error(f'{i}---select元素获取错误')
return
time.sleep(1)
anjian_name = engine.driver.xpath("//tbody[@class='ant-table-tbody']/tr")
assert anjian_name ==[]
@pytest.mark.reset
@get_engine(__file__,'URL')
def test_reset(engine):
for i in ['审查逮捕','审查起诉']:
scdb = engine.driver.xpath(f"//span[text()='{i}']/..")[0]
if scdb:
scdb.click()
else:
engine.logger.error(f'{i}元素获取错误')
return
# 办理阶段
select_button1 = engine.driver.xpath("//div[@id='zt']")[0]
if select_button1:
select_button1.click()
else:
engine.logger.error(f'{i}---办理阶段-元素获取错误')
return
time.sleep(0.5)
subselect_button1 = engine.driver.xpath("//li[text()='未结']")[0]
if subselect_button1:
subselect_button1.click()
else:
engine.logger.error(f'{i}---办理阶段-元素获取错误')
return
time.sleep(0.5)
# 移动案由
select_button2 = engine.driver.xpath("//div[@id='ysay']")[0]
if select_button2:
select_button2.click()
else:
engine.logger.error(f'{i}---移送案由-元素获取错误')
return
time.sleep(0.5)
subselect_button2 = engine.driver.xpath("//li[text()='盗窃罪']")[0]
if subselect_button2:
subselect_button2.click()
else:
engine.logger.error(f'{i}---移送案由-元素获取错误')
return
time.sleep(0.5)
reset = engine.driver.xpath("//button[@type='submit']")[0]
if reset:
reset.click()
else:
engine.logger.error(f'{i}---select元素获取错误')
return
time.sleep(1)
engine.driver.xpath("//span[text()='重 置']/..")[0].click()
time.sleep(0.5)
select_button1 = engine.driver.xpath("//div[@id='zt']//div[@class='ant-select-selection-selected-value']")[0].text
select_button2 = engine.driver.xpath("//div[@id='ysay']//div[@class='ant-select-selection-selected-value']")[0].text
assert select_button1 == '全部'
assert select_button2 == '全部'
This diff is collapsed.
import pytest
import time
import sys
# sys.path.append('../..')
from engine import get_engine
project_name = "TestLogin"
# logger = Logger(project_name).get_logger()
'''
def setup_function():
print('setup_function:每个用例开始前都会执行')
def teardown_function():
print('teardown_function:每个用例结束后都会执行')
'''
@pytest.mark.login
@get_engine(__file__, 'LOGIN')
def test_login(engine):
username = engine.get_userInfo('username')
password = engine.get_userInfo('password')
url = engine.get_testUrl('URL')
print(username, password, url)
engine.logger.info("username: %s" % username)
engine.logger.info("password :%s" % password)
engine.logger.info("Open url: %s" % url)
tags = engine.driver.find_element_by_xpath('//*[@id="root"]/div/div/div[2]/form/div[1]/div/div/span/span/span')
# print(tags.text)
engine.logger.info("tags.text:%s" % tags.text)
tags.click()
time.sleep(1)
engine.driver.find_element_by_xpath('//*[@id="rc-tree-select-list_1"]/ul/li/ul/li[3]/span[1]').click()
tags2 = engine.driver.find_element_by_xpath('//*[@id="rc-tree-select-list_1"]/ul/li/ul/li[3]/ul/li[3]/span[2]/span')
# print(tags2.text)
engine.logger.info("tags2.text:%s" % tags2.text)
tags2.click()
time.sleep(1)
engine.driver.find_element_by_xpath('//*[@id="username"]').send_keys(username)
engine.driver.find_element_by_xpath('//*[@id="password"]').send_keys(password)
engine.driver.find_element_by_xpath('//*[@id="root"]/div/div/div[2]/form/div[4]/div/div/span/button').click()
time.sleep(2)
# engine.driver.quit()
@pytest.mark.login
@get_engine(__file__, 'LOGIN')
def test_login_pwerr(engine):
username = engine.get_userInfo('username')
password = engine.get_userInfo('password')
url = engine.get_testUrl('URL')
# print(username, password, url)
engine.logger.info("username: %s" % username)
engine.logger.info("password :%s" % password)
engine.logger.info("Open url: %s" % url)
# driver = engine.driver
tags = engine.driver.find_element_by_xpath('//*[@id="root"]/div/div/div[2]/form/div[1]/div/div/span/span/span')
# print(tags.text)
engine.logger.info("tags.text:%s" % tags.text)
tags.click()
time.sleep(1)
engine.driver.find_element_by_xpath('//*[@id="rc-tree-select-list_1"]/ul/li/ul/li[3]/span[1]').click()
tags2 = engine.driver.find_element_by_xpath('//*[@id="rc-tree-select-list_1"]/ul/li/ul/li[3]/ul/li[3]/span[2]/span')
# print(tags2.text)
engine.logger.info("tags2.text:%s" % tags2.text)
tags2.click()
time.sleep(1)
# 不输入密码
time1 = time.time()
form_explain_list = engine.driver.xpath('//div[@class="ant-row ant-form-item ant-form-item-with-help"]//div[@class="ant-form-explain"]')
alert_message_list = engine.driver.xpath('//div[@class="main___2iu6s"]//span[@class="ant-alert-message"]')
assert form_explain_list ==[]
assert alert_message_list ==[]
engine.load_image()
engine.driver.xpath('//*[@id="username"]')[0].send_keys(username)
# engine.driver.find_element_by_xpath('//*[@id="password"]').send_keys('123')
engine.driver.xpath('//*[@id="root"]/div/div/div[2]/form/div[4]/div/div/span/button')[0].click()
form_explain = engine.driver.xpath('//div[@class="ant-form-explain"]')[0].text
assert form_explain.strip() == '请输入密码!'
engine.logger.info('test_login_password_err:' + '不输入密码,返回正确的错误信息,text:' + form_explain)
# 输入错误的密码
engine.driver.find_element_by_xpath('//*[@id="password"]').send_keys('test_gt_pw')
engine.driver.find_element_by_xpath('//*[@id="root"]/div/div/div[2]/form/div[4]/div/div/span/button').click()
alert_message = engine.driver.xpath('//div[@class="main___2iu6s"]//span[@class="ant-alert-message"]')[0].text
assert alert_message.strip() == '账户或密码错误'
engine.logger.info('test_login_password_err:' + '输入错误密码,返回正确的错误信息,text:' + alert_message)
@pytest.mark.login
@get_engine(__file__, 'LOGIN')
def test_login_usererr(engine):
username = engine.get_userInfo('username')
password = engine.get_userInfo('password')
url = engine.get_testUrl('URL')
# print(username, password, url)
engine.logger.info("username: %s" % username)
engine.logger.info("password :%s" % password)
engine.logger.info("Open url: %s" % url)
# driver = engine.driver
tags = engine.driver.find_element_by_xpath('//*[@id="root"]/div/div/div[2]/form/div[1]/div/div/span/span/span')
# print(tags.text)
engine.logger.info("tags.text:%s" % tags.text)
tags.click()
time.sleep(1)
engine.driver.find_element_by_xpath('//*[@id="rc-tree-select-list_1"]/ul/li/ul/li[3]/span[1]').click()
tags2 = engine.driver.find_element_by_xpath('//*[@id="rc-tree-select-list_1"]/ul/li/ul/li[3]/ul/li[3]/span[2]/span')
# print(tags2.text)
engine.logger.info("tags2.text:%s" % tags2.text)
tags2.click()
time.sleep(1)
# 不输入密码
assert engine.driver.xpath('//div[@class="ant-form-explain"]') == []
assert engine.driver.xpath('//div[@class="main___2iu6s"]//span[@class="ant-alert-message"]') == []
# engine.driver.find_element_by_xpath('//*[@id="username"]').send_keys(username)
engine.driver.find_element_by_xpath('//*[@id="password"]').send_keys(password)
engine.driver.find_element_by_xpath('//*[@id="root"]/div/div/div[2]/form/div[4]/div/div/span/button').click()
form_explain = engine.driver.xpath('//div[@class="ant-form-explain"]')[0].text
assert form_explain.strip() == '请输入账户名!'
engine.logger.info('test_login_password_err:' + '不输入账户,返回正确的错误信息,text:' + form_explain)
# 输入错误的密码
engine.driver.find_element_by_xpath('//*[@id="username"]').send_keys('test_gt_user')
engine.driver.find_element_by_xpath('//*[@id="root"]/div/div/div[2]/form/div[4]/div/div/span/button').click()
alert_message = engine.driver.xpath('//div[@class="main___2iu6s"]//span[@class="ant-alert-message"]')[0].text
assert alert_message.strip() == '账户或密码错误'
engine.logger.info('test_login_password_err:' + '输入错误账户,返回正确的错误信息,text:' + alert_message)
# if __name__ == '__main__':
# pytest.main(["-m=login", "--html=report.html"])
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment