Skip to content

Commit

Permalink
support hybrid test
Browse files Browse the repository at this point in the history
  • Loading branch information
shikun (E) authored and shikun (E) committed Jul 3, 2017
1 parent d244ed8 commit 6224d6e
Show file tree
Hide file tree
Showing 19 changed files with 298 additions and 298 deletions.
8 changes: 8 additions & 0 deletions .idea/encodings.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

446 changes: 209 additions & 237 deletions .idea/workspace.xml

Large diffs are not rendered by default.

65 changes: 39 additions & 26 deletions Base/BaseOperate.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,10 +24,10 @@ def findElement(self, mOperate):
try:
if type(mOperate) == list: # 多检查点
for item in mOperate:
WebDriverWait(self.driver, baseElement.WAIT_TIME).until(lambda x: elements_by(item, self.driver))
WebDriverWait(self.driver, baseElement.WAIT_TIME).until(lambda x: self.elements_by(item))
return True
if type(mOperate) == dict: # 单检查点
WebDriverWait(self.driver, baseElement.WAIT_TIME).until(lambda x: elements_by(mOperate, self.driver))
WebDriverWait(self.driver, baseElement.WAIT_TIME).until(lambda x: self.elements_by(mOperate))
return True
except selenium.common.exceptions.TimeoutException:
return False
Expand All @@ -48,29 +48,42 @@ def findElement(self, mOperate):
def operate(self, mOperate, testInfo, logTest):
if self.findElement(mOperate):
elements = {
baseElement.CLICK: lambda: click(mOperate, self.driver),
baseElement.SET_VALUE: lambda: set_value(mOperate, self.driver),
baseElement.SWIPELEFT: lambda: swipeLeft(mOperate, self.driver)
baseElement.CLICK: lambda: self.click(mOperate),
baseElement.SET_VALUE: lambda: self.set_value(mOperate),
baseElement.SWIPELEFT: lambda: self.swipeLeft(mOperate)
}
logTest.buildStartLine(testInfo[0]["id"] + "_" + testInfo[0]["title"] + "_" + mOperate["element_info"]) # 记录日志
elements[mOperate["operate_type"]]()
return True
return False

# 点击事件
def click(self, mOperate):
if mOperate["find_type"] == baseElement.find_element_by_id or mOperate["find_type"] == baseElement.find_element_by_xpath:
self.elements_by(mOperate).click()

'''
切换webview和native
'''
def switchToContext(self, webview=True):
if webview:
for cons in self.driver.contexts:
if cons.lower().startswith("webview"):
self.driver._switch_to.context(cons)
break
else:
self.driver._switch_to.context("NATIVE_APP") # 切换到native

# 点击事件
def click(mOperate, driver):
if mOperate["find_type"] == baseElement.find_element_by_id or mOperate["find_type"] == baseElement.find_element_by_xpath:
elements_by(mOperate, driver).click()


# 左滑动
def swipeLeft(mOperate, driver):
# time.sleep(1)
width = driver.get_window_size()["width"]
height = driver.get_window_size()["height"]
for i in range(mOperate["time"]):
driver.swipe(width / 4 * 3, height / 2, width / 4 * 1, height / 2, 600)
# 左滑动
def swipeLeft(self, mOperate):
# time.sleep(1)
width = self.driver.get_window_size()["width"]
height = self.driver.get_window_size()["height"]
for i in range(mOperate["time"]):
self.driver.swipe(width / 4 * 3, height / 2, width / 4 * 1, height / 2, 600)


# start_x,start_y,end_x,end_y
Expand All @@ -79,16 +92,16 @@ def swipeLeft(mOperate, driver):
# def operate_tap(elemen_by,driver,element_info, xy=[]):
# elements_by(elemen_by, driver, element_info).tap(x=xy[0], y=xy[1])

def set_value(mOperate, driver):
elements_by(mOperate, driver).set_value(mOperate["text"])
def set_value(self, mOperate):
self.elements_by(mOperate).set_value(mOperate["text"])


# 封装常用的标签
def elements_by(mOperate, driver):
elements = {
baseElement.find_element_by_id: lambda: driver.find_element_by_id(mOperate["element_info"]),
baseElement.find_element_by_xpath: lambda: driver.find_element_by_xpath(mOperate["element_info"]),
baseElement.find_element_by_class_name: lambda: driver.find_element_by_class_name(mOperate['element_info'])

}
return elements[mOperate["find_type"]]()
def elements_by(self, mOperate):
elements = {
baseElement.find_element_by_id: lambda: self.driver.find_element_by_id(mOperate["element_info"]),
baseElement.find_element_by_xpath: lambda: self.driver.find_element_by_xpath(mOperate["element_info"]),
baseElement.find_element_by_class_name: lambda: self.driver.find_element_by_class_name(mOperate['element_info'])

}
return elements[mOperate["find_type"]]()
6 changes: 3 additions & 3 deletions Base/BaseRunner.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,10 +21,10 @@ def appium_testcase(devices):
desired_caps['appPackage'] = devices["appPackage"]
desired_caps['appActivity'] = devices["appActivity"]
desired_caps['udid'] = devices["deviceName"]
desired_caps["unicodeKeyboard"] = "True"
desired_caps["resetKeyboard"] = "True"
# desired_caps["unicodeKeyboard"] = "True"
# desired_caps["resetKeyboard"] = "True"
desired_caps["noReset"] = "True"
desired_caps['app'] = devices["app"]
# desired_caps['app'] = devices["app"]

remote = "http://127.0.0.1:" + str(devices["port"]) + "/wd/hub"
driver = webdriver.Remote(remote, desired_caps)
Expand Down
Binary file modified Base/__pycache__/BaseExcel.cpython-34.pyc
Binary file not shown.
Binary file modified Base/__pycache__/BaseOperate.cpython-34.pyc
Binary file not shown.
Binary file modified Base/__pycache__/BaseRunner.cpython-34.pyc
Binary file not shown.
5 changes: 0 additions & 5 deletions Log/Huawei_H60-L02_android_4.4.220170607201104/outPut.log

This file was deleted.

7 changes: 0 additions & 7 deletions Log/samsung_GT-I9500_android_4.4.220170607193932/outPut.log

This file was deleted.

Binary file not shown.
27 changes: 22 additions & 5 deletions PageObject/WritePage.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,27 +6,44 @@ class Write:
kwargs: WebDriver driver, String path(yaml配置参数)
isOperate: 操作失败,检查点就失败
logTest: 日记记录
testInfo:
testCase:
testInfo:用例介绍
testCase:操作步骤
prefix: 前置条件
'''

def __init__(self, **kwargs):
self.driver = kwargs["driver"]
self.path = kwargs["path"]
self.operateElement = OperateElement(self.driver)
self.isOperate = True
self.testInfo = getYam(self.path)["testinfo"]
self.testCase = getYam(self.path)["testcase"]

_getYam = getYam(self.path)
self.testInfo = _getYam["testinfo"]
self.testCase = _getYam["testcase"]
self._prefix = _getYam["prefix"]

'''
前置条件
logTest 日记记录器
'''
def prefix(self, logTest):
result = self.operateElement.operate(mOperate=self._prefix[0], testInfo=self.testInfo, logTest=logTest)
self.operateElement.switchToContext(self._prefix[0]["isWebView"])
if not result:
print("前置条件失败")
self.isOperate = False
return
'''
操作步骤
logTest 日记记录器
'''

def operate(self, logTest):

self.prefix(logTest)

for item in self.testCase:
result = self.operateElement.operate(item, self.testInfo, logTest)

if not result:
print("操作失败")
self.isOperate = False
Expand Down
Binary file modified PageObject/__pycache__/LoginPage.cpython-34.pyc
Binary file not shown.
Binary file modified PageObject/__pycache__/WritePage.cpython-34.pyc
Binary file not shown.
Binary file modified runner/Report.xlsx
Binary file not shown.
6 changes: 3 additions & 3 deletions runner/runner.py
Original file line number Diff line number Diff line change
Expand Up @@ -51,9 +51,9 @@ def runnerPool(getDevices):
def runnerCaseApp(devices):
starttime = datetime.now()
suite = unittest.TestSuite()
suite.addTest(ParametrizedTestCase.parametrize(FirstOpenTest, param=devices))
suite.addTest(ParametrizedTestCase.parametrize(LoginTest, param=devices))
# suite.addTest(ParametrizedTestCase.parametrize(WriteTest, param=devices))
# suite.addTest(ParametrizedTestCase.parametrize(FirstOpenTest, param=devices))
# suite.addTest(ParametrizedTestCase.parametrize(LoginTest, param=devices))
suite.addTest(ParametrizedTestCase.parametrize(WriteTest, param=devices))
# fp = open(PATH("../report/index.html"), "wb")
# runner = HTMLTestRunner.HTMLTestRunner(stream=fp, title=u"自动化测试报告", description=u"用例执行情况")
# runner.run(suite)
Expand Down
4 changes: 2 additions & 2 deletions test/WriteTest.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,5 +16,5 @@ def testWrite(self):
def setUp(self):
super(WriteTest, self).setUp()

def tearDown(self):
self.driver.close()
# def tearDown(self):
# self.driver.close()
Binary file modified test/__pycache__/WriteTest.cpython-34.pyc
Binary file not shown.
8 changes: 4 additions & 4 deletions yaml/devices.yaml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
- devices: emulator-5554
port: 4724
config: appium --session-override -p 4724 -bp 4734 -U emulator-5554
platformName: android
# - devices: emulator-5554
# port: 4724
# config: appium --session-override -p 4724 -bp 4734 -U emulator-5554
# platformName: android
- devices: DU2TAN15AJ049163
port: 4725
config: appium --session-override -p 4725 -bp 4735 -U DU2TAN15AJ049163
Expand Down
14 changes: 8 additions & 6 deletions yaml/write.yaml
Original file line number Diff line number Diff line change
@@ -1,15 +1,17 @@
testinfo:
- id: test0003
title: 登录
title: 发布文章
prefix:
- element_info: com.jianshu.haruki:id/iv_write
find_type: id
operate_type: click
isWebView: true
testcase:
- element_info: com.jianshu.haruki:id/tab_writting
find_type: id
operate_type: click
- element_info: //android.view.View[@index='1']
- element_info: //android.view.View[@content-desc='请输入标题']
find_type: xpath
operate_type: set_value
text: pls input title
- element_info: //android.view.View[@index='2']
- element_info: //android.view.View[@content-desc='请输入正文']
find_type: xpath
operate_type: set_value
text: auto test msg
Expand Down

0 comments on commit 6224d6e

Please sign in to comment.