const ::aurum::ReqFindElement *request,
::aurum::RspFindElement *response) override;
+ ::grpc::Status findElements(::grpc::ServerContext *context,
+ const ::aurum::ReqFindElements *request,
+ ::aurum::RspFindElements *response) override;
+
::grpc::Status getValue(::grpc::ServerContext *context,
const ::aurum::ReqGetValue *request,
::aurum::RspGetValue *response) override;
#include "Commands/KillServerCommand.h"
#include "Commands/FindElementCommand.h"
+#include "Commands/FindElementsCommand.h"
#include "Commands/GetAttributeCommand.h"
#include "Commands/GetValueCommand.h"
::grpc::Status execute() override;
protected:
virtual std::shared_ptr<ISearchable> getSearchableTop(void);
- virtual std::vector<std::shared_ptr<UiSelector>> getSelectors(void);
-};
\ No newline at end of file
+ virtual std::shared_ptr<UiSelector> getSelector(void);
+};
--- /dev/null
+/*
+ * Copyright (c) 2021 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#include <gio/gio.h>
+#include <grpcpp/grpcpp.h>
+#include "Commands/Command.h"
+#include "ObjectMapper.h"
+#include <aurum.grpc.pb.h>
+#include "config.h"
+
+class FindElementsCommand : public Command {
+protected:
+ const ::aurum::ReqFindElements *mRequest;
+ ::aurum::RspFindElements *mResponse;
+
+protected:
+ ObjectMapper *mObjMap;
+
+public:
+ FindElementsCommand(const ::aurum::ReqFindElements *request,
+ ::aurum::RspFindElements *response);
+ ::grpc::Status execute() override;
+protected:
+ virtual std::shared_ptr<ISearchable> getSearchableTop(void);
+ virtual std::vector<std::shared_ptr<UiSelector>> getSelectors(void);
+};
files('src/Commands/ClickCommand.cc'),
files('src/Commands/CloseAppCommand.cc'),
files('src/Commands/FindElementCommand.cc'),
+ files('src/Commands/FindElementsCommand.cc'),
files('src/Commands/FlickCommand.cc'),
files('src/Commands/GetAttributeCommand.cc'),
files('src/Commands/GetDeviceTimeCommand.cc'),
return execute(cmd.get(), true);
}
+::grpc::Status aurumServiceImpl::aurumServiceImpl::findElements(
+ ::grpc::ServerContext *context, const ::aurum::ReqFindElements *request,
+ ::aurum::RspFindElements *response)
+{
+ std::unique_ptr<FindElementsCommand> cmd = std::make_unique<FindElementsCommand>(request, response);
+ return execute(cmd.get(), true);
+}
+
::grpc::Status aurumServiceImpl::aurumServiceImpl::click(
::grpc::ServerContext *context, const ::aurum::ReqClick *request,
::aurum::RspClick *response)
return searchableObj;
}
-std::vector<std::shared_ptr<UiSelector>> FindElementCommand::getSelectors(void)
+std::shared_ptr<UiSelector> FindElementCommand::getSelector(void)
{
auto sel = std::make_shared<UiSelector>();
if(mRequest->_textpartialmatch_case()) sel->textPartialMatch(mRequest->textpartialmatch());
if(mRequest->_xpath_case()) sel->xpath(mRequest->xpath());
- return std::vector<std::shared_ptr<UiSelector>>{sel};
+ return sel;
}
::grpc::Status FindElementCommand::execute()
{
LOGI("findElement --------------- ");
auto searchableObj = getSearchableTop();
- auto selectors = getSelectors();
+ auto selector = getSelector();
+
+ auto found = searchableObj->findObject(selector);
+
+ if (found != nullptr) {
+ UiObject *obj = found.get();
+ obj->refresh();
+ if (mObjMap->getElement(obj->getId()) == nullptr)
+ mObjMap->addElement(std::move(found));
+
+ LOGI("found object : %p elementId:%s", obj, obj->getId().c_str());
+
+ ::aurum::Element *elm = mResponse->mutable_element();
+ elm->set_elementid(obj->getId());
+ elm->set_package(obj->getApplicationPackage());
+
+ ::aurum::Rect *rect = elm->mutable_geometry();
+ const Rect<int> &size = obj->getScreenBoundingBox();
+ rect->set_x(size.mTopLeft.x);
+ rect->set_y(size.mTopLeft.y);
+ rect->set_width(size.width());
+ rect->set_height(size.height());
+
+ ::aurum::Rect *windowRect = elm->mutable_window_relative_geometry();
+ const Rect<int> &windowRelativeSize = obj->getWindowBoundingBox();
+ windowRect->set_x(windowRelativeSize.mTopLeft.x);
+ windowRect->set_y(windowRelativeSize.mTopLeft.y);
+ windowRect->set_width(windowRelativeSize.width());
+ windowRect->set_height(windowRelativeSize.height());
+
+ elm->set_widget_type(obj->getElementType());
+ elm->set_widget_style(obj->getElementStyle());
+
+ elm->set_text(obj->getText());
+ elm->set_xpath(obj->getXPath());
+ elm->set_automationid(obj->getAutomationId());
+ elm->set_package(obj->getApplicationPackage());
+ elm->set_role(obj->getRole());
+
+ elm->set_ischecked(obj->isChecked());
+ elm->set_ischeckable(obj->isCheckable());
+ elm->set_isclickable(obj->isClickable());
+ elm->set_isenabled(obj->isEnabled());
+ elm->set_isfocused(obj->isFocused());
+ elm->set_isfocusable(obj->isFocusable());
+ elm->set_isscrollable(obj->isScrollable());
+ elm->set_isselected(obj->isSelected());
+ elm->set_isshowing(obj->isShowing());
+ elm->set_isactive(obj->isActive());
+ elm->set_isvisible(obj->isVisible());
+ elm->set_isselectable(obj->isSelectable());
- std::vector<std::shared_ptr<UiObject>> founds = {};
-
- for ( auto &sel : selectors ) {
- auto ret = searchableObj->findObjects(sel);
- std::move(std::begin(ret), std::end(ret), std::back_inserter(founds));
- }
-
- if (founds.size() > 0) {
- for (auto& found : founds) {
- UiObject *obj = found.get();
- obj->refresh();
- if (mObjMap->getElement(obj->getId()) == nullptr)
- mObjMap->addElement(std::move(found));
-
- LOGI("found object : %p elementId:%s", obj, obj->getId().c_str());
-
- ::aurum::Element *elm = mResponse->add_elements();
- elm->set_elementid(obj->getId());
- elm->set_package(obj->getApplicationPackage());
-
- ::aurum::Rect *rect = elm->mutable_geometry();
- const Rect<int> &size = obj->getScreenBoundingBox();
- rect->set_x(size.mTopLeft.x);
- rect->set_y(size.mTopLeft.y);
- rect->set_width(size.width());
- rect->set_height(size.height());
-
- ::aurum::Rect *windowRect = elm->mutable_window_relative_geometry();
- const Rect<int> &windowRelativeSize = obj->getWindowBoundingBox();
- windowRect->set_x(windowRelativeSize.mTopLeft.x);
- windowRect->set_y(windowRelativeSize.mTopLeft.y);
- windowRect->set_width(windowRelativeSize.width());
- windowRect->set_height(windowRelativeSize.height());
-
- elm->set_widget_type(obj->getElementType());
- elm->set_widget_style(obj->getElementStyle());
-
- elm->set_text(obj->getText());
- elm->set_xpath(obj->getXPath());
- elm->set_automationid(obj->getAutomationId());
- elm->set_package(obj->getApplicationPackage());
- elm->set_role(obj->getRole());
-
- elm->set_ischecked(obj->isChecked());
- elm->set_ischeckable(obj->isCheckable());
- elm->set_isclickable(obj->isClickable());
- elm->set_isenabled(obj->isEnabled());
- elm->set_isfocused(obj->isFocused());
- elm->set_isfocusable(obj->isFocusable());
- elm->set_isscrollable(obj->isScrollable());
- elm->set_isselected(obj->isSelected());
- elm->set_isshowing(obj->isShowing());
- elm->set_isactive(obj->isActive());
- elm->set_isvisible(obj->isVisible());
- elm->set_isselectable(obj->isSelectable());
- }
mResponse->set_status(::aurum::RspStatus::OK);
+ } else {
+ mResponse->set_status(::aurum::RspStatus::ERROR);
}
return grpc::Status::OK;
--- /dev/null
+/*
+ * Copyright (c) 2021 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#include "bootstrap.h"
+#include "FindElementsCommand.h"
+#include "UiObject.h"
+#include "UiDevice.h"
+#include "UiSelector.h"
+#include "Sel.h"
+#include "ISearchable.h"
+
+FindElementsCommand::FindElementsCommand(const ::aurum::ReqFindElements *request,
+ ::aurum::RspFindElements *response)
+ : mRequest{request}, mResponse{response}
+{
+ mObjMap = ObjectMapper::getInstance();
+}
+std::shared_ptr<ISearchable> FindElementsCommand::getSearchableTop(void)
+{
+ std::shared_ptr<ISearchable> searchableObj{nullptr};
+
+ if (mRequest->_elementid_case() != 0) {
+ searchableObj = mObjMap->getElement(mRequest->elementid());
+ }
+ if (!searchableObj) searchableObj = UiDevice::getInstance();
+
+ return searchableObj;
+}
+
+std::vector<std::shared_ptr<UiSelector>> FindElementsCommand::getSelectors(void)
+{
+ auto sel = std::make_shared<UiSelector>();
+
+ if(mRequest->_elementid_case()) sel->id(mRequest->elementid());
+ if(mRequest->_automationid_case()) sel->automationid(mRequest->automationid());
+ if(mRequest->_textfield_case()) sel->text(mRequest->textfield());
+ if(mRequest->_widgettype_case()) sel->type(mRequest->widgettype());
+ if(mRequest->_widgetstyle_case()) sel->style(mRequest->widgetstyle());
+ if(mRequest->_ischecked_case()) sel->isChecked(mRequest->ischecked());
+ if(mRequest->_ischeckable_case()) sel->isCheckable(mRequest->ischeckable());
+ if(mRequest->_isclickable_case()) sel->isClickable(mRequest->isclickable());
+ if(mRequest->_isenabled_case()) sel->isEnabled(mRequest->isenabled());
+ if(mRequest->_isfocused_case()) sel->isFocused(mRequest->isfocused());
+ if(mRequest->_isfocusable_case()) sel->isFocusable(mRequest->isfocusable());
+ if(mRequest->_isscrollable_case()) sel->isScrollable(mRequest->isscrollable());
+ if(mRequest->_isselected_case()) sel->isSelected(mRequest->isselected());
+ if(mRequest->_isshowing_case()) sel->isShowing(mRequest->isshowing());
+ if(mRequest->_isactive_case()) sel->isActive(mRequest->isactive());
+ if(mRequest->_mindepth_case()) sel->minDepth(mRequest->mindepth());
+ if(mRequest->_maxdepth_case()) sel->maxDepth(mRequest->maxdepth());
+ if(mRequest->_packagename_case()) sel->pkg(mRequest->packagename());
+ if(mRequest->_textpartialmatch_case()) sel->textPartialMatch(mRequest->textpartialmatch());
+ if(mRequest->_xpath_case()) sel->xpath(mRequest->xpath());
+
+ return std::vector<std::shared_ptr<UiSelector>>{sel};
+}
+
+::grpc::Status FindElementsCommand::execute()
+{
+ LOGI("findElements --------------- ");
+ auto searchableObj = getSearchableTop();
+ auto selectors = getSelectors();
+
+ std::vector<std::shared_ptr<UiObject>> founds = {};
+
+ for ( auto &sel : selectors ) {
+ auto ret = searchableObj->findObjects(sel);
+ std::move(std::begin(ret), std::end(ret), std::back_inserter(founds));
+ }
+
+ if (founds.size() > 0) {
+ for (auto& found : founds) {
+ UiObject *obj = found.get();
+ obj->refresh();
+ if (mObjMap->getElement(obj->getId()) == nullptr)
+ mObjMap->addElement(std::move(found));
+
+ LOGI("found object : %p elementId:%s", obj, obj->getId().c_str());
+
+ ::aurum::Element *elm = mResponse->add_elements();
+ elm->set_elementid(obj->getId());
+ elm->set_package(obj->getApplicationPackage());
+
+ ::aurum::Rect *rect = elm->mutable_geometry();
+ const Rect<int> &size = obj->getScreenBoundingBox();
+ rect->set_x(size.mTopLeft.x);
+ rect->set_y(size.mTopLeft.y);
+ rect->set_width(size.width());
+ rect->set_height(size.height());
+
+ ::aurum::Rect *windowRect = elm->mutable_window_relative_geometry();
+ const Rect<int> &windowRelativeSize = obj->getWindowBoundingBox();
+ windowRect->set_x(windowRelativeSize.mTopLeft.x);
+ windowRect->set_y(windowRelativeSize.mTopLeft.y);
+ windowRect->set_width(windowRelativeSize.width());
+ windowRect->set_height(windowRelativeSize.height());
+
+ elm->set_widget_type(obj->getElementType());
+ elm->set_widget_style(obj->getElementStyle());
+
+ elm->set_text(obj->getText());
+ elm->set_xpath(obj->getXPath());
+ elm->set_automationid(obj->getAutomationId());
+ elm->set_package(obj->getApplicationPackage());
+ elm->set_role(obj->getRole());
+
+ elm->set_ischecked(obj->isChecked());
+ elm->set_ischeckable(obj->isCheckable());
+ elm->set_isclickable(obj->isClickable());
+ elm->set_isenabled(obj->isEnabled());
+ elm->set_isfocused(obj->isFocused());
+ elm->set_isfocusable(obj->isFocusable());
+ elm->set_isscrollable(obj->isScrollable());
+ elm->set_isselected(obj->isSelected());
+ elm->set_isshowing(obj->isShowing());
+ elm->set_isactive(obj->isActive());
+ elm->set_isvisible(obj->isVisible());
+ elm->set_isselectable(obj->isSelectable());
+ }
+ mResponse->set_status(::aurum::RspStatus::OK);
+ } else {
+ mResponse->set_status(::aurum::RspStatus::ERROR);
+ }
+
+ return grpc::Status::OK;
+}
rpc getScreenSize(ReqGetScreenSize) returns (RspGetScreenSize) {}
rpc actionAndWaitEvent(ReqActionAndWaitEvent) returns (RspActionAndWaitEvent) {}
rpc setFocus(ReqSetFocus) returns (RspSetFocus) {}
+ rpc findElements(ReqFindElements) returns (RspFindElements) {}
}
// ------------------------------------ //
repeated ReqFindElement children = 21;
}
+
message RspFindElement {
+ RspStatus status = 1;
+ Element element = 2;
+}
+
+message ReqFindElements {
+ oneof _elementid {
+ string elementId = 1;
+ }
+
+ oneof _automationid {
+ string automationId = 2;
+ }
+
+ oneof _textfield {
+ string textField = 3;
+ }
+
+ oneof _widgettype {
+ string widgetType = 4;
+ }
+
+ oneof _widgetstyle {
+ string widgetStyle = 5;
+ }
+
+ oneof _ischecked {
+ bool isChecked = 6;
+ }
+
+ oneof _ischeckable {
+ bool isCheckable= 7;
+ }
+
+ oneof _isclickable {
+ bool isClickable = 8;
+ }
+
+ oneof _isenabled {
+ bool isEnabled = 9;
+ }
+
+ oneof _isfocused {
+ bool isFocused = 10;
+ }
+
+ oneof _isfocusable {
+ bool isFocusable = 11;
+ }
+
+ oneof _isscrollable {
+ bool isScrollable = 12;
+ }
+
+ oneof _isselected {
+ bool isSelected = 13;
+ }
+
+ oneof _isshowing {
+ bool isShowing = 14;
+ }
+
+ oneof _isactive {
+ bool isActive = 15;
+ }
+ oneof _mindepth {
+ int32 minDepth = 16;
+ }
+
+ oneof _maxdepth {
+ int32 maxDepth = 17;
+ }
+
+ oneof _packagename {
+ string packageName = 18;
+ }
+
+ oneof _textpartialmatch {
+ string textPartialMatch = 19;
+ }
+
+ oneof _xpath {
+ string xpath = 20;
+ }
+
+ repeated ReqFindElements children = 21;
+}
+
+message RspFindElements {
RspStatus status = 1;
repeated Element elements = 2;
}
}
});
});
-
- /*it("Find SearchAll Window", function (done) {
+
+ /*it("Find SearchAll Window", function (done) {
this.timeout(15000);
client.findElement({ maxDepth: 1, packageName: "com.samsung.tv.searchall", isActive: true, isShowing: true }, (err, response) => {
if (err) {
console.log(err);
- done(err);
+ done(err);
} else {
let returnList = response.elements;
assert.ok(returnList.length > 0);
-
console.log(returnList[0]);
searchAll = returnList[0];
assert.strictEqual(searchAll.package, "com.samsung.tv.searchall");
done();
}
- });
- });*/
+ });
+ });*/
- it("Find TextField", function (done) {
+ it("Find TextField", function (done) {
this.timeout(15000);
// assert.notEqual(searchAll, undefined);
client.findElement({ widgetType: "TextField", packageName: "com.samsung.tv.searchall" }, (err, response) => {
if (err) {
console.log(err);
- done(err);
+ done(err);
} else {
- let returnList = response.elements;
- assert.ok(returnList.length > 0);
-
- textField = returnList[0];
+ let textField = response.element;
+ assert.null(textField);
+
assert.strictEqual(textField.widget_type, "TextField");
done();
}
- });
+ });
});
it("Set Text", function (done) {
client.setValue({ elementId: textField.elementId, type: 0, stringValue: "Movie" }, (err, response) => {
if (err) {
console.log(err);
- done(err);
+ done(err);
} else {
assert.strictEqual(response.status, "OK");
done();
}
- });
+ });
})
});
});
def PickerExecuteTestWithText(stub):
# 1
response = stub.findElement(ReqFindElement(widgetType='TextField'))
- if len(response.elements) <= 0: return False
+ if response.element is None: return False
# 2
- targetObj = response.elements[0].elementId
+ targetObj = response.element.elementId
testString = 'Picker'
stub.setValue(ReqSetValue(elementId=targetObj, stringValue=testString))
# 3
response = stub.findElement(ReqFindElement(textField='Run'))
- if len(response.elements) <= 0: return False
- targetObj = response.elements[0].elementId
+ if response.element is None: return False
+ targetObj = response.element.elementId
stub.click(ReqClick(type='ELEMENTID', elementId=targetObj))
# 4
response = stub.findElement(ReqFindElement(textField='PickerTest1'))
- if len(response.elements) <= 0: return False
- targetObj = response.elements[0].elementId
+ if response.element is None: return False
+ targetObj = response.element.elementId
stub.click(ReqClick(type='ELEMENTID', elementId=targetObj))
# 5
- response = stub.findElement(ReqFindElement(textField='Black'))
+ response = stub.findElements(ReqFindElements(textField='Black'))
if len(response.elements) <= 0: return False
return True
# 1
stub.flick(ReqFlick(startPoint=Point(x=300, y=750), endPoint=Point(x=300, y=200), durationMs=150))
response = stub.findElement(ReqFindElement(textField='PickerTest1'))
- if len(response.elements) <= 0: continue
- targetObj = response.elements[0].elementId
+ if response.element is None: continue
+ targetObj = response.element.elementId
response = stub.getSize(ReqGetSize(elementId=targetObj))
if inScreen(response.size):
# 2
break
# 3
- response = stub.findElement(ReqFindElement(textField='Black'))
+ response = stub.findElements(ReqFindElements(textField='Black'))
if len(response.elements) <= 0: return False
return True
# 4. Check the loop works well while changing the picker item by flick event
def PickerScrollTest(stub):
# 1
- response = stub.findElement(ReqFindElement(widgetType='PickerScroller'))
+ response = stub.findElements(ReqFindElements(widgetType='PickerScroller'))
if len(response.elements) <= 0: return False
# 2
responseText = stub.findElement(ReqFindElement(textField='Black'))
- if len(response.elements) <= 0: return False
+ if response.element is None: return False
# 3
- pickerCenterX = response.elements[0].geometry.x + (response.elements[0].geometry.width / 2)
- pickerCenterY = response.elements[0].geometry.y + (response.elements[0].geometry.height / 2)
+ pickerCenterX = response.element.geometry.x + (response.element.geometry.width / 2)
+ pickerCenterY = response.element.geometry.y + (response.element.geometry.height / 2)
for tryCnt in range(30):
# 4
stub.flick(ReqFlick(startPoint=Point(x=int(pickerCenterX), y=int(pickerCenterY)), endPoint=Point(x=int(pickerCenterX), y=int(pickerCenterY-70)), durationMs=100))
response = stub.findElement(ReqFindElement(textField='Black'))
- if len(response.elements) > 0:
- if response.elements[0].elementId == responseText.elements[0].elementId:
+ if response.element:
+ if response.element.elementId == responseText.element.elementId:
return True
return False
import os
import sys
sys.path.append(os.path.dirname(os.path.abspath(os.path.dirname(os.path.dirname(__file__)))))
-from __future__ import print_function
from aurum_pb2 import *
from aurum_pb2_grpc import BootstrapStub
import logging
def findElementTest(stub):
response = stub.findElement(ReqFindElement(isClickable=True))
- for el in response.elements:
- return True
+ if response.element: return True
return False
def getValueTest(stub):
- response = stub.findElement(ReqFindElement(textField='Button'))
+ response = stub.findElements(ReqFindElements(textField='Button'))
print("els", response)
for el in response.elements:
response = stub.getValue(ReqGetValue(elementId=el.elementId))
for tryCnt in range(10):
stub.flick(ReqFlick(startPoint=Point(x=160, y=350), endPoint=Point(x=160, y=10), durationMs=500))
response = stub.findElement(ReqFindElement(textField='Entry'))
- if len(response.elements) <= 0: continue
- targetObj = response.elements[0].elementId
+ if response.element is None: continue
+ targetObj = response.element.elementId
response = stub.getSize(ReqGetSize(elementId=targetObj))
if inScreen(response.size):
stub.click(ReqClick(type='ELEMENTID', elementId=targetObj))
for tryCnt in range(10):
stub.flick(ReqFlick(startPoint=Point(x=160, y=350), endPoint=Point(x=160, y=10), durationMs=500))
response = stub.findElement(ReqFindElement(textField='Singleline Entry'))
- if len(response.elements) <= 0: continue
- targetObj = response.elements[0].elementId
+ if response.element is None: continue
+ targetObj = response.element.elementId
response = stub.getSize(ReqGetSize(elementId=targetObj))
isShowing = stub.getAttribute(ReqGetAttribute(elementId=targetObj, attribute='SHOWING')).boolValue
if inScreen(response.size) or isShowing:
break
response = stub.findElement(ReqFindElement(widgetType='Elm_Entry'))
- if len(response.elements) <= 0: return False
- targetObj = response.elements[0].elementId
+ if response.element is None: return False
+ targetObj = response.element.elementId
testString = 'set test string by calling SetValue Method'
stub.setValue(ReqSetValue(elementId=targetObj, stringValue=testString))
return True
def getSizeTest(stub):
- response = stub.findElement(ReqFindElement(textField='Button'))
+ response = stub.findElements(ReqFindElements(textField='Button'))
print("els", response)
for el in response.elements:
response = stub.getSize(ReqGetSize(elementId=el.elementId))
return False
def getAttributeTest(stub):
- response = stub.findElement(ReqFindElement(textField='Button'))
+ response = stub.findElements(ReqFindElements(textField='Button'))
if len(response.elements) <= 0: return False
checkList = [
if isFailed == True: return False
- response = stub.findElement(ReqFindElement(textField='Check'))
+ response = stub.findElements(ReqFindElements(textField='Check'))
if len(response.elements) <= 0: return False
checkList = [
return isFailed == False
def clickTest(stub):
- response = stub.findElement(ReqFindElement(textField='Accessibility'))
+ response = stub.findElements(ReqFindElements(textField='Accessibility'))
if len(response.elements) <= 0: return False
for el in response.elements:
stub.click(ReqClick(elementId=el.elementId, type='ELEMENTID'))
- response = stub.findElement(ReqFindElement(textField='Screen Reader'))
+ response = stub.findElements(ReqFindElements(textField='Screen Reader'))
if len(response.elements) <= 0: return False
for el in response.elements:
stub.click(ReqClick(coordination=Point(x=320, y=130), type='COORD'))
- response = stub.findElement(ReqFindElement(textField='UI Descriptions'))
+ response = stub.findElements(ReqFindElements(textField='UI Descriptions'))
if len(response.elements) <= 0: return False
return True
def flickTest(stub):
response = stub.findElement(ReqFindElement(textField='Bg', isShowing=True))
- if len(response.elements) <= 0: return False
- targetObj = response.elements[0].elementId
+ if response.element is None: return False
+ targetObj = response.element.elementId
for tryCnt in range(10):
print('Flick to bottom to find "Spinner" item @ tries:', tryCnt)
stub.flick(ReqFlick(startPoint=Point(x=160, y=359), endPoint=Point(x=160, y=1), durationMs=110))
- response = stub.findElement(ReqFindElement(textField='Spinner'))
+ response = stub.findElements(ReqFindElements(textField='Spinner'))
time.sleep(0.01)
print(response)
if len(response.elements) > 0:
def PickerExecuteTestWithText(stub):
# 1
response = stub.findElement(ReqFindElement(widgetType='TextField'))
- if len(response.elements) <= 0: return False
+ if response.element is None: return False
# 2
- targetObj = response.elements[0].elementId
+ targetObj = response.element.elementId
testString = 'Picker'
stub.setValue(ReqSetValue(elementId=targetObj, stringValue=testString))
# 3
response = stub.findElement(ReqFindElement(textField='Run'))
- if len(response.elements) <= 0: return False
- targetObj = response.elements[0].elementId
+ if response.element is None: return False
+ targetObj = response.element.elementId
stub.click(ReqClick(type='ELEMENTID', elementId=targetObj))
# 4
response = stub.findElement(ReqFindElement(textField='PickerTest1'))
- if len(response.elements) <= 0: return False
- targetObj = response.elements[0].elementId
+ if response.element is None: return False
+ targetObj = response.element.elementId
stub.click(ReqClick(type='ELEMENTID', elementId=targetObj))
# 5
- response = stub.findElement(ReqFindElement(textField='Black'))
+ response = stub.findElements(ReqFindElements(textField='Black'))
if len(response.elements) <= 0: return False
return True
# 1
stub.flick(ReqFlick(startPoint=Point(x=300, y=750), endPoint=Point(x=300, y=200), durationMs=150))
response = stub.findElement(ReqFindElement(textField='PickerTest1'))
- if len(response.elements) <= 0: continue
- targetObj = response.elements[0].elementId
+ if response.elements is None: continue
+ targetObj = response.element.elementId
response = stub.getSize(ReqGetSize(elementId=targetObj))
if inScreen(response.size):
# 2
break
# 3
- response = stub.findElement(ReqFindElement(textField='Black'))
+ response = stub.findElements(ReqFindElements(textField='Black'))
if len(response.elements) <= 0: return False
return True
# 4. Check the loop works well while changing the picker item by flick event
def PickerScrollTest(stub):
# 1
- response = stub.findElement(ReqFindElement(widgetType='PickerScroller'))
+ response = stub.findElements(ReqFindElements(widgetType='PickerScroller'))
if len(response.elements) <= 0: return False
# 2
responseText = stub.findElement(ReqFindElement(textField='Black'))
- if len(response.elements) <= 0: return False
+ if response.element is None: return False
# 3
- pickerCenterX = response.elements[0].geometry.x + (response.elements[0].geometry.width / 2)
- pickerCenterY = response.elements[0].geometry.y + (response.elements[0].geometry.height / 2)
+ pickerCenterX = response.element.geometry.x + (response.element.geometry.width / 2)
+ pickerCenterY = response.element.geometry.y + (response.element.geometry.height / 2)
for tryCnt in range(30):
# 4
# Wait until view update
time.sleep(0.3)
response = stub.findElement(ReqFindElement(textField='Black'))
- if len(response.elements) > 0:
- if response.elements[0].elementId == responseText.elements[0].elementId:
+ if response.element:
+ if response.element.elementId == responseText.element.elementId:
return True
return False
# Please refer key codes below page
# https://code.sec.samsung.net/confluence/display/GFX/VD+Key+Code+Table
def MultiViewSizeTest(stub):
- response = stub.findElement(ReqFindElement(textField='VSComponent2'))
+ response = stub.findElements(ReqFindElements(textField='VSComponent2'))
if len(response.elements) <= 0: return False
- responseGuide = stub.findElement(ReqFindElement(textField='Guide TextBox'))
+ responseGuide = stub.findElements(ReqFindElements(textField='Guide TextBox'))
if len(response.elements) <= 0:
stub.sendKey(ReqKey(type='XF86', actionType='STROKE', XF86keyCode='Return'))
time.sleep(1)
responseAfter = stub.findElement(ReqFindElement(textField='VSComponent2'))
- if len(responseAfter.elements) <= 0: return False
+ if responseAfter.element is None: return False
- if response.elements[0].geometry.width < responseAfter.elements[0].geometry.width:
+ if response.element.geometry.width < responseAfter.element.geometry.width:
return True
return False
time.sleep(10)
# It fails if there is a View
- response= stub.findElement(ReqFindElement(textField='VSComponent2'))
+ response= stub.findElements(ReqFindElements(textField='VSComponent2'))
if len(response.elements) > 0: return False
stub.sendKey(ReqKey(type='XF86', actionType='LONG_STROKE', XF86keyCode='XF86Back'))
# Find TextField and input "Movie" text
def SearchTestWithText(stub):
response = stub.findElement(ReqFindElement(widgetType='TextField'))
- if len(response.elements) <= 0: return False
- targetObj = response.elements[0].elementId
+ if response.element is None: return False
+ targetObj = response.element.elementId
testString = 'Movie'
stub.setValue(ReqSetValue(elementId=targetObj, stringValue=testString))
# Find Foused item and move focus to right then compare focused item with previous one
def SearchFocusedObject(stub):
response = stub.findElement(ReqFindElement(isFocused=True))
- if len(response.elements) <= 0: return False
+ if response.elements is None: return False
- prevObj = response.elements[0].elementId
+ prevObj = response.element.elementId
stub.sendKey(ReqKey(type='XF86', actionType='LONG_STROKE', XF86keyCode='Right'))
time.sleep(1)
response = stub.findElement(ReqFindElement(isFocused=True))
- if len(response.elements) <= 0: return False
+ if response.elements is None: return False
- if prevObj != response.elements[0].elementId:
+ if prevObj != response.element.elementId:
return True
return False