Introduce a new FindElements command 53/273853/9
authorHosang Kim <hosang12.kim@samsung.com>
Tue, 12 Apr 2022 05:53:02 +0000 (14:53 +0900)
committerHosang Kim <hosang12.kim@samsung.com>
Fri, 15 Apr 2022 07:37:32 +0000 (16:37 +0900)
Change-Id: I80e554ac877dd391437f583a44f7184f8df305d4

15 files changed:
org.tizen.aurum-bootstrap/inc/AurumServiceImpl.h
org.tizen.aurum-bootstrap/inc/Commands/Commands.h
org.tizen.aurum-bootstrap/inc/Commands/FindElementCommand.h
org.tizen.aurum-bootstrap/inc/Commands/FindElementsCommand.h [new file with mode: 0644]
org.tizen.aurum-bootstrap/meson.build
org.tizen.aurum-bootstrap/src/AurumServiceImpl.cc
org.tizen.aurum-bootstrap/src/Commands/FindElementCommand.cc
org.tizen.aurum-bootstrap/src/Commands/FindElementsCommand.cc [new file with mode: 0644]
protocol/aurum.proto
protocol/resources/node/tv/searchAll.js
protocol/resources/python/mobile/NUITizenGallery/NUITizenGallery.py
protocol/resources/python/mobile/mobileDemoTest/mobileDemoTest.py
protocol/resources/python/tv/NUITizenGalleryTV/NUITizenGalleryTV.py
protocol/resources/python/tv/multiView.py
protocol/resources/python/tv/searchAll.py

index a471ec421a406bff9a756ad3265ebd6b3a58f9e8..119e36a69db4aaf5b2f78b108f56e64e14f088eb 100644 (file)
@@ -39,6 +39,10 @@ public:
                                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;
index c7728d5e65a9d1834433638a6b85eb5dafb7834f..e0badc10f163cc17979ef76d4da4ea7ef2a9b49f 100644 (file)
@@ -17,6 +17,7 @@
 
 #include "Commands/KillServerCommand.h"
 #include "Commands/FindElementCommand.h"
+#include "Commands/FindElementsCommand.h"
 
 #include "Commands/GetAttributeCommand.h"
 #include "Commands/GetValueCommand.h"
index 1e2f3f03f1752d5eae72480d8737ffcde0de3f49..01e4a21650a13ae8b1c7b7078b517c0b5169cc74 100644 (file)
@@ -36,5 +36,5 @@ public:
     ::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);
+};
diff --git a/org.tizen.aurum-bootstrap/inc/Commands/FindElementsCommand.h b/org.tizen.aurum-bootstrap/inc/Commands/FindElementsCommand.h
new file mode 100644 (file)
index 0000000..c7ea99e
--- /dev/null
@@ -0,0 +1,40 @@
+/*
+ * 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);
+};
index 62ebd350a1ff1d4898337e3c193f81f6797004d9..0e90268b4a30f1c31731518062b5dc358132a5c3 100644 (file)
@@ -19,6 +19,7 @@ bootstrap_svr_src += [
    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'),
index ea50a2b73f66566b53e44360ef79499481d7b4be..fe62067a40f468b53ccee124366ce3e942be0495 100644 (file)
@@ -64,6 +64,14 @@ aurumServiceImpl::~aurumServiceImpl()
     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)
index 5e25eceebf66f977cdb79b41b30dffe461ebf598..cdcdff23dae1442ce646b482f035bf2f2e7420aa 100644 (file)
@@ -41,7 +41,7 @@ std::shared_ptr<ISearchable> FindElementCommand::getSearchableTop(void)
     return searchableObj;
 }
 
-std::vector<std::shared_ptr<UiSelector>> FindElementCommand::getSelectors(void)
+std::shared_ptr<UiSelector> FindElementCommand::getSelector(void)
 {
     auto sel = std::make_shared<UiSelector>();
 
@@ -66,72 +66,68 @@ std::vector<std::shared_ptr<UiSelector>> FindElementCommand::getSelectors(void)
     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;
diff --git a/org.tizen.aurum-bootstrap/src/Commands/FindElementsCommand.cc b/org.tizen.aurum-bootstrap/src/Commands/FindElementsCommand.cc
new file mode 100644 (file)
index 0000000..74e281b
--- /dev/null
@@ -0,0 +1,140 @@
+/*
+ * 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;
+}
index 252a819a062cd7dfd073b550492800a8aa799b21..a9ef0f90389563f8d5646377601efebb62ce7b4f 100644 (file)
@@ -32,6 +32,7 @@ service Bootstrap {
    rpc getScreenSize(ReqGetScreenSize) returns (RspGetScreenSize) {}
    rpc actionAndWaitEvent(ReqActionAndWaitEvent) returns (RspActionAndWaitEvent) {}
    rpc setFocus(ReqSetFocus) returns (RspSetFocus) {}
+   rpc findElements(ReqFindElements) returns (RspFindElements) {}
 }
 
 // ------------------------------------ //
@@ -180,7 +181,96 @@ message ReqFindElement {
 
    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;
 }
index 11ed5464d29fd817f52796f31af50a28e0ff2dae..7d87afcfe714006d1e1ccb0794f5120223984a78 100644 (file)
@@ -42,42 +42,40 @@ describe("Aurum Nodejs Test", function () {
         }
       });
     });
-    
-    /*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) {
@@ -86,12 +84,12 @@ describe("Aurum Nodejs Test", function () {
       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();
         }
-      });      
+      });
     })
   });
 });
index 3db24ab371451e540945889c9ad16500a43681be..b0e552855448e97ba3a35a3c7a6047cf88a417e4 100644 (file)
@@ -24,23 +24,23 @@ def inScreen(size):
 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
@@ -53,8 +53,8 @@ def PickerExecuteTest(stub):
         # 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
@@ -62,7 +62,7 @@ def PickerExecuteTest(stub):
             break
 
     # 3
-    response = stub.findElement(ReqFindElement(textField='Black'))
+    response = stub.findElements(ReqFindElements(textField='Black'))
     if len(response.elements) <= 0: return False
     return True
 
@@ -72,21 +72,21 @@ def PickerExecuteTest(stub):
 # 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
index e7369a78875634167c324afb7e0121d8a855e220..30be305d88c96428d140d579385981a3167501f8 100644 (file)
@@ -2,7 +2,6 @@ from __future__ import print_function
 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
@@ -11,12 +10,11 @@ import time
 
 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))
@@ -34,8 +32,8 @@ def setValueClearTest(stub):
     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))
@@ -44,8 +42,8 @@ def setValueClearTest(stub):
     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:
@@ -53,8 +51,8 @@ def setValueClearTest(stub):
             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))
@@ -71,7 +69,7 @@ def setValueClearTest(stub):
     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))
@@ -80,7 +78,7 @@ def getSizeTest(stub):
     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 = [
@@ -104,7 +102,7 @@ def getAttributeTest(stub):
 
     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 = [
@@ -129,19 +127,19 @@ def getAttributeTest(stub):
     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
@@ -154,13 +152,13 @@ def longClickTest(stub):
 
 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:
index 304ffa8228ccfafcb72378c1a837afe9d7d2e79c..d9083837b24f1e633d5d65a9af05e3daed964de2 100644 (file)
@@ -24,23 +24,23 @@ def inScreen(size):
 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
@@ -53,8 +53,8 @@ def PickerExecuteTest(stub):
         # 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
@@ -62,7 +62,7 @@ def PickerExecuteTest(stub):
             break
 
     # 3
-    response = stub.findElement(ReqFindElement(textField='Black'))
+    response = stub.findElements(ReqFindElements(textField='Black'))
     if len(response.elements) <= 0: return False
     return True
 
@@ -72,14 +72,14 @@ def PickerExecuteTest(stub):
 # 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
@@ -87,8 +87,8 @@ def PickerScrollTest(stub):
         # 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
index a6f2a9a461219c101f1c14972f6e1ec5d388c9f7..b404739ca83b33375003aed264cc8bead43a54a3 100644 (file)
@@ -12,10 +12,10 @@ import time
 # 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'))
 
@@ -26,9 +26,9 @@ def MultiViewSizeTest(stub):
     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
@@ -43,7 +43,7 @@ def MultiViewContentsTest(stub):
     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'))
index 4b9ccc3fe33201c29da8e7367523319f8a8998ae..a03d2b26f13290a8539064a833ae9e222b33f327 100644 (file)
@@ -11,8 +11,8 @@ import time
 # 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))
 
@@ -24,16 +24,16 @@ def SearchTestWithText(stub):
 # 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