Browse Source

appium-browser-added

paul 4 years ago
parent
commit
b0e099cda5
34 changed files with 399 additions and 60 deletions
  1. 2 2
      baangt/TestCase/TestCaseMaster.py
  2. 4 0
      baangt/TestSteps/TestStepMaster.py
  3. 87 32
      baangt/base/BrowserHandling/BrowserHandling.py
  4. 9 0
      baangt/base/BrowserHandling/logs/20200318_145218.log
  5. 9 0
      baangt/base/BrowserHandling/logs/20200318_145232.log
  6. 11 0
      baangt/base/BrowserHandling/logs/20200318_145255.log
  7. 13 0
      baangt/base/BrowserHandling/logs/20200318_145335.log
  8. 12 0
      baangt/base/BrowserHandling/logs/20200318_145337.log
  9. 12 0
      baangt/base/BrowserHandling/logs/20200318_145352.log
  10. 13 0
      baangt/base/BrowserHandling/logs/20200318_145407.log
  11. 12 0
      baangt/base/BrowserHandling/logs/20200318_145411.log
  12. 12 0
      baangt/base/BrowserHandling/logs/20200318_145440.log
  13. 11 0
      baangt/base/BrowserHandling/logs/20200318_145533.log
  14. 12 0
      baangt/base/BrowserHandling/logs/20200318_145546.log
  15. 12 0
      baangt/base/BrowserHandling/logs/20200318_145549.log
  16. 11 0
      baangt/base/BrowserHandling/logs/20200318_145642.log
  17. 12 0
      baangt/base/BrowserHandling/logs/20200318_145655.log
  18. 12 0
      baangt/base/BrowserHandling/logs/20200318_145701.log
  19. 12 0
      baangt/base/BrowserHandling/logs/20200318_145733.log
  20. 12 0
      baangt/base/BrowserHandling/logs/20200318_145737.log
  21. 12 0
      baangt/base/BrowserHandling/logs/20200318_145752.log
  22. 12 0
      baangt/base/BrowserHandling/logs/20200318_145755.log
  23. 3 0
      baangt/base/GlobalConstants.py
  24. 0 1
      baangt/base/IBAN.py
  25. 22 7
      baangt/base/TestRun/TestRun.py
  26. 25 15
      baangt/base/TestRunExcelImporter.py
  27. BIN
      baangt/chromedriver.exe
  28. BIN
      bmp.log
  29. BIN
      browserDrivers/chromedriver.exe
  30. 30 0
      debug.log
  31. BIN
      examples/DropsTestRunDefinition.xlsx
  32. 2 2
      examples/globals.json
  33. 3 1
      examples/globalsAPI.json
  34. BIN
      server.log

+ 2 - 2
baangt/TestCase/TestCaseMaster.py

@@ -26,8 +26,8 @@ class TestCaseMaster:
             else:
                 self.browserType = self.testCaseSettings[1][GC.KWARGS_BROWSER]
                 self.browserSettings = self.testCaseSettings[1][GC.BROWSER_ATTRIBUTES]
-                self.browser = self.testRunInstance.getBrowser(browserName=self.browserType,
-                                                               browserAttributes=self.browserSettings)
+                self.mobileType = self.testCaseSettings[1][GC.KWARGS_MOBILE]
+                self.browser = self.testRunInstance.getBrowser(browserName=self.browserType, browserAttributes=self.browserSettings, mobileType=self.mobileType)
                 self.kwargs[GC.KWARGS_BROWSER] = self.browser
         elif self.testCaseType == GC.KWARGS_API_SESSION:
             # FIXME: For now we're using session_number always = 1. We need to be able to run e.g. 10 sessions with

+ 4 - 0
baangt/TestSteps/TestStepMaster.py

@@ -80,6 +80,10 @@ class TestStepMaster:
                 continue  # We ignored the steps as it doesn't qualify
 
             if lActivity == "GOTOURL":
+                print('-----------------this is the url--------------------')
+                print(self.browserSession)
+                print('----------------------this is the url--------------------------')
+                lValue ='https://drops.earthsquad.global'
                 self.browserSession.goToUrl(lValue)
             elif lActivity == "SETTEXT":
                 self.browserSession.findByAndSetText(xpath=xpath, css=css, id=id, value=lValue, timeout=lTimeout)

+ 87 - 32
baangt/base/BrowserHandling/BrowserHandling.py

@@ -1,5 +1,6 @@
 import os
 from selenium import webdriver
+from appium import webdriver as Appiumwebdriver
 from selenium.webdriver.support import expected_conditions as ec
 from selenium.webdriver.common.by import By
 from selenium.webdriver.support.ui import WebDriverWait
@@ -22,6 +23,7 @@ from urllib.request import urlretrieve
 import tarfile
 import zipfile
 import requests
+import time
 
 logger = logging.getLogger("pyC")
 
@@ -59,7 +61,7 @@ class BrowserDriver:
         else:
             self.screenshotPath = os.getcwd()
 
-    def createNewBrowser(self, browserName=GC.BROWSER_FIREFOX, desiredCapabilities={}, **kwargs):
+    def createNewBrowser(self, mobileType=None, browserName=GC.BROWSER_FIREFOX, desiredCapabilities={}, **kwargs):
         """
         Will find the specified executables of the desired browser and start it with the given capabilities.
 
@@ -74,7 +76,6 @@ class BrowserDriver:
             GC.BROWSER_SAFARI: webdriver.Safari,
             GC.BROWSER_EDGE: webdriver.Edge,
             GC.BROWSER_REMOTE: webdriver.Remote}
-
         if browserName in browserNames:
             GeckoExecutable = "geckodriver"
             ChromeExecutable = "chromedriver"
@@ -89,45 +90,100 @@ class BrowserDriver:
 
             browserProxy = kwargs.get('browserProxy')
             browserInstance = kwargs.get('browserInstance', 'unknown')
+
+
             if browserName == GC.BROWSER_FIREFOX:
                 lCurPath = lCurPath.joinpath(GeckoExecutable)
-                if not(os.path.isfile(str(lCurPath))):
-                    self.downloadDriver(browserName)
-
-                profile = None
-                firefox_proxy = browserProxy.selenium_proxy() if browserProxy else None
-                if firefox_proxy:
-                    profile = webdriver.FirefoxProfile()
-                    profile.set_proxy(firefox_proxy)
-                self.driver = browserNames[browserName](options=self.__createBrowserOptions(browserName=browserName,
-                                                                                            desiredCapabilities=desiredCapabilities),
-                                                        executable_path=self.__findBrowserDriverPaths(GeckoExecutable),
-                                                        firefox_profile=profile)
-
-                browserProxy.new_har("baangt-firefox-{}".format(browserInstance),
-                                     options={'captureHeaders': True, 'captureContent': True}) \
-                    if firefox_proxy else None
+                if mobileType == 'True':
+                    if not (os.path.isfile(str(lCurPath))):
+                        self.downloadDriver(browserName)
+                    desired_cap = {}
+                    desired_cap['platformName'] = "Android"
+                    desired_cap['deviceName'] = "emulator-5554"
+                    desired_cap['browserName'] = browserName
+                    desired_cap['chromedriverExecutable'] = self.__findBrowserDriverPaths(ChromeExecutable)
+                    desired_cap['noReset'] = False
+                    self.driver = Appiumwebdriver.Remote("http://localhost:4723/wd/hub", desired_cap)
+                else:
+                    if not(os.path.isfile(str(lCurPath))):
+                        self.downloadDriver(browserName)
+                    profile = None
+                    firefox_proxy = browserProxy.selenium_proxy() if browserProxy else None
+                    if firefox_proxy:
+                        profile = webdriver.FirefoxProfile()
+                        profile.set_proxy(firefox_proxy)
+                    self.driver = browserNames[browserName](options=self.__createBrowserOptions(browserName=browserName,
+                                                                                                desiredCapabilities=desiredCapabilities),
+                                                            executable_path=self.__findBrowserDriverPaths(GeckoExecutable),
+                                                            firefox_profile=profile)
+                    browserProxy.new_har("baangt-firefox-{}".format(browserInstance),
+                                         options={'captureHeaders': True, 'captureContent': True}) \
+                        if firefox_proxy else None
             elif browserName == GC.BROWSER_CHROME:
                 lCurPath = lCurPath.joinpath(ChromeExecutable)
-                if not (os.path.isfile(str(lCurPath))):
-                    self.downloadDriver(browserName)
-                self.driver = browserNames[browserName](chrome_options=self.__createBrowserOptions(browserName=browserName,
-                                                                                            desiredCapabilities=desiredCapabilities,
-                                                                                            browserProxy=browserProxy),
-                                                        executable_path=self.__findBrowserDriverPaths(ChromeExecutable))
-                browserProxy.new_har("baangt-chrome-{}".format(browserInstance),
-                                     options={'captureHeaders': True, 'captureContent': True}) if browserProxy else None
+                if mobileType == 'True':
+                    if not (os.path.isfile(str(lCurPath))):
+                        self.downloadDriver(browserName)
+                    desired_cap = {}
+                    desired_cap['platformName'] = "Android"
+                    desired_cap['deviceName'] = "emulator-5554"
+                    desired_cap['browserName'] = browserName
+                    desired_cap['chromedriverExecutable'] = self.__findBrowserDriverPaths(ChromeExecutable)
+                    desired_cap['noReset'] = False
+                    self.driver = Appiumwebdriver.Remote("http://localhost:4723/wd/hub", desired_cap)
+                else:
+                    if not (os.path.isfile(str(lCurPath))):
+                        self.downloadDriver(browserName)
+                    self.driver = browserNames[browserName](chrome_options=self.__createBrowserOptions(browserName=browserName,
+                                                                                                desiredCapabilities=desiredCapabilities,
+                                                                                                browserProxy=browserProxy),
+                                                            executable_path=self.__findBrowserDriverPaths(ChromeExecutable))
+                    browserProxy.new_har("baangt-chrome-{}".format(browserInstance),
+                                         options={'captureHeaders': True, 'captureContent': True}) if browserProxy else None
             elif browserName == GC.BROWSER_EDGE:
-                self.driver = browserNames[browserName](executable_path=self.__findBrowserDriverPaths("msedgedriver.exe"))
+                if mobileType == 'True':
+                    if not (os.path.isfile(str(lCurPath))):
+                        self.downloadDriver(browserName)
+                    desired_cap = {}
+                    desired_cap['platformName'] = "Android"
+                    desired_cap['deviceName'] = "emulator-5554"
+                    desired_cap['browserName'] = browserName
+                    desired_cap['chromedriverExecutable'] = self.__findBrowserDriverPaths(ChromeExecutable)
+                    desired_cap['noReset'] = False
+                    self.driver = Appiumwebdriver.Remote("http://localhost:4723/wd/hub", desired_cap)
+                else:
+                    self.driver = browserNames[browserName](executable_path=self.__findBrowserDriverPaths("msedgedriver.exe"))
             elif browserName == GC.BROWSER_SAFARI:
                 # SAFARI doesn't provide any options, but desired_capabilities.
                 # Executable_path = the standard safaridriver path.
-                if len(desiredCapabilities) == 0:
-                    desiredCapabilities = {}
-                self.driver = browserNames[browserName](desired_capabilities=desiredCapabilities)
+                if mobileType == 'True':
+                    if not (os.path.isfile(str(lCurPath))):
+                        self.downloadDriver(browserName)
+                    desired_cap = {}
+                    desired_cap['platformName'] = "Android"
+                    desired_cap['deviceName'] = "emulator-5554"
+                    desired_cap['browserName'] = browserName
+                    desired_cap['chromedriverExecutable'] = self.__findBrowserDriverPaths(ChromeExecutable)
+                    desired_cap['noReset'] = False
+                    self.driver = Appiumwebdriver.Remote("http://localhost:4723/wd/hub", desired_cap)
+                else:
+                    if len(desiredCapabilities) == 0:
+                        desiredCapabilities = {}
+                    self.driver = browserNames[browserName](desired_capabilities=desiredCapabilities)
 
             elif browserName == GC.BROWSER_REMOTE:
-                self.driver = browserNames[browserName](options=self.__createBrowserOptions(browserName=browserName,
+                if mobileType == 'True':
+                    if not (os.path.isfile(str(lCurPath))):
+                        self.downloadDriver(browserName)
+                    desired_cap = {}
+                    desired_cap['platformName'] = "Android"
+                    desired_cap['deviceName'] = "emulator-5554"
+                    desired_cap['browserName'] = browserName
+                    desired_cap['chromedriverExecutable'] = self.__findBrowserDriverPaths(ChromeExecutable)
+                    desired_cap['noReset'] = False
+                    self.driver = Appiumwebdriver.Remote("http://localhost:4723/wd/hub", desired_cap)
+                else:
+                    self.driver = browserNames[browserName](options=self.__createBrowserOptions(browserName=browserName,
                                                                                             desiredCapabilities=desiredCapabilities),
                                                         command_executor='http://localhost:4444/wd/hub',
                                                         desired_capabilities=desiredCapabilities)
@@ -184,7 +240,6 @@ class BrowserDriver:
         @param browserProxy: Proxy-Server IP+Port
         @return: the proper BrowserOptions for the currently active browser.
         """
-
         if browserName == GC.BROWSER_CHROME:
             lOptions = ChromeOptions()
             lOptions.add_argument('--proxy-server={0}'.format(browserProxy.proxy)) if browserProxy else None

File diff suppressed because it is too large
+ 9 - 0
baangt/base/BrowserHandling/logs/20200318_145218.log


File diff suppressed because it is too large
+ 9 - 0
baangt/base/BrowserHandling/logs/20200318_145232.log


File diff suppressed because it is too large
+ 11 - 0
baangt/base/BrowserHandling/logs/20200318_145255.log


File diff suppressed because it is too large
+ 13 - 0
baangt/base/BrowserHandling/logs/20200318_145335.log


File diff suppressed because it is too large
+ 12 - 0
baangt/base/BrowserHandling/logs/20200318_145337.log


File diff suppressed because it is too large
+ 12 - 0
baangt/base/BrowserHandling/logs/20200318_145352.log


File diff suppressed because it is too large
+ 13 - 0
baangt/base/BrowserHandling/logs/20200318_145407.log


File diff suppressed because it is too large
+ 12 - 0
baangt/base/BrowserHandling/logs/20200318_145411.log


File diff suppressed because it is too large
+ 12 - 0
baangt/base/BrowserHandling/logs/20200318_145440.log


File diff suppressed because it is too large
+ 11 - 0
baangt/base/BrowserHandling/logs/20200318_145533.log


File diff suppressed because it is too large
+ 12 - 0
baangt/base/BrowserHandling/logs/20200318_145546.log


File diff suppressed because it is too large
+ 12 - 0
baangt/base/BrowserHandling/logs/20200318_145549.log


File diff suppressed because it is too large
+ 11 - 0
baangt/base/BrowserHandling/logs/20200318_145642.log


File diff suppressed because it is too large
+ 12 - 0
baangt/base/BrowserHandling/logs/20200318_145655.log


File diff suppressed because it is too large
+ 12 - 0
baangt/base/BrowserHandling/logs/20200318_145701.log


File diff suppressed because it is too large
+ 12 - 0
baangt/base/BrowserHandling/logs/20200318_145733.log


File diff suppressed because it is too large
+ 12 - 0
baangt/base/BrowserHandling/logs/20200318_145737.log


File diff suppressed because it is too large
+ 12 - 0
baangt/base/BrowserHandling/logs/20200318_145752.log


File diff suppressed because it is too large
+ 12 - 0
baangt/base/BrowserHandling/logs/20200318_145755.log


+ 3 - 0
baangt/base/GlobalConstants.py

@@ -1,6 +1,8 @@
 KWARGS_DATA = "data"
+KWARGS_MOBILE = "Mobile"
 KWARGS_BROWSER = "Browser"
 KWARGS_API_SESSION = "api"
+KWARGS_APPIUM = 'Appium'
 KWARGS_TESTCASETYPE = "TestCaseType"
 KWARGS_TESTRUNATTRIBUTES = "TESTRUNEXECUTIONPARAMETERS"
 KWARGS_TESTRUNINSTANCE = "TESTRUNINSTANCE"
@@ -28,6 +30,7 @@ BROWSER_CHROME = "CHROME"
 BROWSER_SAFARI = "SAFARI"
 BROWSER_EDGE = "EDGE"
 BROWSER_REMOTE = 'REMOTE'
+BROWSER_APPIUM = 'APPIUM'
 BROWSER_MODE_HEADLESS = "HEADLESS"
 BROWSER_ATTRIBUTES = "BrowserAttributes"
 

+ 0 - 1
baangt/base/IBAN.py

@@ -13,7 +13,6 @@ class IBAN:
         """
         self.bankLeitZahl = bankLeitZahl
         self.bankLand = bankLand
-
         pass
 
     def getRandomIBAN(self):

+ 22 - 7
baangt/base/TestRun/TestRun.py

@@ -116,7 +116,7 @@ class TestRun:
     def getAllTestRunAttributes(self):
         return self.testRunUtils.getCompleteTestRunAttributes(self.testRunName)
 
-    def getBrowser(self, browserInstance=1, browserName=None, browserAttributes=None):
+    def getBrowser(self, browserInstance=1, browserName=None, browserAttributes=None, mobileType=None):
         """
         This method is called whenever a browser instance (existing or new) is needed. If called without
         parameters it will create one instance of Firefox (geckodriver).
@@ -130,19 +130,33 @@ class TestRun:
         @return: the browser instance of base class BrowserDriver
 
         """
-        if browserInstance not in self.browser.keys():
-            logger.info(f"opening new instance {browserInstance} of browser {browserName}")
+        if mobileType == 'True' :
+            logger.info(f"opening new Appium instance {browserInstance} of Appium browser {browserName}")
             self._getBrowserInstance(browserInstance=browserInstance)
             browser_proxy = self.browserProxyAndServer[0] if self.browserProxyAndServer else None
-            self.browser[browserInstance].createNewBrowser(browserName=browserName,
+            self.browser[browserInstance].createNewBrowser(mobileType=mobileType,
+                                                           browserName=browserName,
                                                            desiredCapabilities=browserAttributes,
                                                            browserProxy=browser_proxy,
                                                            browserInstance=browserInstance)
             if self.globalSettings.get("TC." + GC.EXECUTION_SLOW):
                 self.browser[browserInstance].slowExecutionToggle()
+            return self.browser[browserInstance]
         else:
-            logger.debug(f"Using existing instance of browser {browserInstance}")
-        return self.browser[browserInstance]
+            if browserInstance not in self.browser.keys():
+                logger.info(f"opening new instance {browserInstance} of browser {browserName}")
+                self._getBrowserInstance(browserInstance=browserInstance)
+                browser_proxy = self.browserProxyAndServer[0] if self.browserProxyAndServer else None
+                self.browser[browserInstance].createNewBrowser(mobileType=mobileType,
+                                                               browserName=browserName,
+                                                               desiredCapabilities=browserAttributes,
+                                                               browserProxy=browser_proxy,
+                                                               browserInstance=browserInstance)
+                if self.globalSettings.get("TC." + GC.EXECUTION_SLOW):
+                    self.browser[browserInstance].slowExecutionToggle()
+            else:
+                logger.debug(f"Using existing instance of browser {browserInstance}")
+            return self.browser[browserInstance]
 
     def _getBrowserInstance(self, browserInstance):
         self.browser[browserInstance] = BrowserDriver(timing=self.timing,
@@ -233,6 +247,7 @@ class TestRun:
             l_class(**kwargs)  # Executes the class __init__
         self.kwargs = kwargs
 
+
     def _initTestRun(self):
         self.loadJSONGlobals()
         if not self.globalSettings.get(GC.PATH_SCREENSHOTS,None):
@@ -265,7 +280,7 @@ class TestRun:
         if ".XLSX" in self.testRunFileName.upper():
             logger.info(f"Reading Definition from {self.testRunFileName}")
             lExcelImport = TestRunExcelImporter(FileNameAndPath=self.testRunFileName, testRunUtils=self.testRunUtils)
-            lExcelImport.importConfig()
+            lExcelImport.importConfig(self.globalSettings)
 
     @staticmethod
     def __dynamicImportClasses(fullQualifiedImportName):

+ 25 - 15
baangt/base/TestRunExcelImporter.py

@@ -22,18 +22,18 @@ class TestRunExcelImporter:
         self.testStepExecutionNumber = 0
         # self.testRunAttributes = testRunUtils.testRunAttributes
         self.testRunUtils = testRunUtils
+
         try:
             self.excelFile = xlrd.open_workbook(FileNameAndPath)
         except FileNotFoundError as e:
             raise BaseException(f"File not found - exiting {e}")
-
         self.fileName = utils.extractFileNameFromFullPath(FileNameAndPath)
 
-    def importConfig(self):
-        self._initTestRun()
+    def importConfig(self, global_settings):
+        self._initTestRun(global_settings)
         return self.testRunUtils.getCompleteTestRunAttributes(self.fileName)
 
-    def _initTestRun(self):
+    def _initTestRun(self, global_settings):
         """
         Writes a new entry to testRunUtils --> = this current TestRunDefinition (Filename)
         Then loops through the tabs "TestRun", "ExportFieldList", "TestCaseSequence" and so on,
@@ -99,17 +99,26 @@ class TestRunExcelImporter:
         else:
             # Dirty, but not possible in any other way in API-Simple-Format:
             if "API" in self.fileName.upper():
-                lTestCaseDict = {1: {"TestCaseSequenceNumber": 1,
-                                 "TestCaseNumber": 1,
-                                 "TestCaseType": GC.KWARGS_API_SESSION,
-                                 "TestCaseClass": GC.CLASSES_TESTCASE}}
+                    lTestCaseDict = {1: {"TestCaseSequenceNumber": 1,
+                                     "TestCaseNumber": 1,
+                                     "TestCaseType": GC.KWARGS_API_SESSION,
+                                     "TestCaseClass": GC.CLASSES_TESTCASE}}
             else:
-                lTestCaseDict = {1: {"TestCaseSequenceNumber": 1,
-                                 "TestCaseNumber": 1,
-                                 "TestCaseType": GC.KWARGS_BROWSER,
-                                 "TestCaseClass": GC.CLASSES_TESTCASE,
-                                 GC.KWARGS_BROWSER: GC.BROWSER_FIREFOX,
-                                 GC.BROWSER_ATTRIBUTES: ""}}
+                if global_settings['TC.Mobile'] == 'True':
+                    lTestCaseDict = {1: {"TestCaseSequenceNumber": 1,
+                                         "TestCaseNumber": 1,
+                                         "TestCaseType": GC.KWARGS_BROWSER,
+                                         "TestCaseClass": GC.CLASSES_TESTCASE,
+                                         GC.KWARGS_BROWSER: GC.BROWSER_FIREFOX,
+                                         GC.BROWSER_ATTRIBUTES: "",
+                                         GC.KWARGS_MOBILE: ""}}
+                else:
+                    lTestCaseDict = {1: {"TestCaseSequenceNumber": 1,
+                                     "TestCaseNumber": 1,
+                                     "TestCaseType": GC.KWARGS_BROWSER,
+                                     "TestCaseClass": GC.CLASSES_TESTCASE,
+                                     GC.KWARGS_BROWSER: GC.BROWSER_FIREFOX,
+                                     GC.BROWSER_ATTRIBUTES: ""}}
         for key, testCase in lTestCaseDict.items():
             testSequenceRoot = testrunSequence[testCase["TestCaseSequenceNumber"]][1]
             testSequenceRoot[GC.STRUCTURE_TESTCASE] = {testCase["TestCaseNumber"]: []}
@@ -117,7 +126,8 @@ class TestRunExcelImporter:
             testSequenceRoot[GC.STRUCTURE_TESTCASE][testCase["TestCaseNumber"]].append(
                 {"TestCaseType": testCase["TestCaseType"],
                  GC.KWARGS_BROWSER: testCase.get("Browser"),
-                 GC.BROWSER_ATTRIBUTES: testCase.get("BrowserAttributes")
+                 GC.BROWSER_ATTRIBUTES: testCase.get("BrowserAttributes"),
+                 GC.KWARGS_MOBILE: testCase.get("Mobile")
                  })
 
         xlsTab = self._getTab("TestStep")

BIN
baangt/chromedriver.exe


BIN
bmp.log


BIN
browserDrivers/chromedriver.exe


+ 30 - 0
debug.log

@@ -0,0 +1,30 @@
+[0318/172358.891:ERROR:process_reader_win.cc(123)] NtOpenThread: {Access Denied} A process has requested access to an object, but has not been granted those access rights. (0xc0000022)
+[0318/172358.893:ERROR:exception_snapshot_win.cc(98)] thread ID 23896 not found in process
+[0318/172358.920:ERROR:process_reader_win.cc(123)] NtOpenThread: {Access Denied} A process has requested access to an object, but has not been granted those access rights. (0xc0000022)
+[0318/172358.920:ERROR:exception_snapshot_win.cc(98)] thread ID 13028 not found in process
+[0318/172359.071:ERROR:process_reader_win.cc(123)] NtOpenThread: {Access Denied} A process has requested access to an object, but has not been granted those access rights. (0xc0000022)
+[0318/172359.071:ERROR:exception_snapshot_win.cc(98)] thread ID 31488 not found in process
+[0318/172651.450:ERROR:process_reader_win.cc(123)] NtOpenThread: {Access Denied} A process has requested access to an object, but has not been granted those access rights. (0xc0000022)
+[0318/172651.451:ERROR:exception_snapshot_win.cc(98)] thread ID 32168 not found in process
+[0318/172651.596:ERROR:process_reader_win.cc(123)] NtOpenThread: {Access Denied} A process has requested access to an object, but has not been granted those access rights. (0xc0000022)
+[0318/172651.596:ERROR:exception_snapshot_win.cc(98)] thread ID 31232 not found in process
+[0318/175315.808:ERROR:process_reader_win.cc(123)] NtOpenThread: {Access Denied} A process has requested access to an object, but has not been granted those access rights. (0xc0000022)
+[0318/175315.831:ERROR:exception_snapshot_win.cc(98)] thread ID 28972 not found in process
+[0318/175315.847:ERROR:process_reader_win.cc(123)] NtOpenThread: {Access Denied} A process has requested access to an object, but has not been granted those access rights. (0xc0000022)
+[0318/175315.848:ERROR:exception_snapshot_win.cc(98)] thread ID 29860 not found in process
+[0318/175316.021:ERROR:process_reader_win.cc(123)] NtOpenThread: {Access Denied} A process has requested access to an object, but has not been granted those access rights. (0xc0000022)
+[0318/175316.022:ERROR:exception_snapshot_win.cc(98)] thread ID 23472 not found in process
+[0318/175644.516:ERROR:process_reader_win.cc(123)] NtOpenThread: {Access Denied} A process has requested access to an object, but has not been granted those access rights. (0xc0000022)
+[0318/175644.517:ERROR:exception_snapshot_win.cc(98)] thread ID 12108 not found in process
+[0318/175644.665:ERROR:process_reader_win.cc(123)] NtOpenThread: {Access Denied} A process has requested access to an object, but has not been granted those access rights. (0xc0000022)
+[0318/175644.665:ERROR:exception_snapshot_win.cc(98)] thread ID 8908 not found in process
+[0318/180334.714:ERROR:process_reader_win.cc(123)] NtOpenThread: {Access Denied} A process has requested access to an object, but has not been granted those access rights. (0xc0000022)
+[0318/180334.716:ERROR:exception_snapshot_win.cc(98)] thread ID 22976 not found in process
+[0318/180334.877:ERROR:process_reader_win.cc(123)] NtOpenThread: {Access Denied} A process has requested access to an object, but has not been granted those access rights. (0xc0000022)
+[0318/180334.877:ERROR:exception_snapshot_win.cc(98)] thread ID 32356 not found in process
+[0318/190656.384:ERROR:process_reader_win.cc(123)] NtOpenThread: {Access Denied} A process has requested access to an object, but has not been granted those access rights. (0xc0000022)
+[0318/190656.399:ERROR:exception_snapshot_win.cc(98)] thread ID 5916 not found in process
+[0318/190656.425:ERROR:process_reader_win.cc(123)] NtOpenThread: {Access Denied} A process has requested access to an object, but has not been granted those access rights. (0xc0000022)
+[0318/190656.425:ERROR:exception_snapshot_win.cc(98)] thread ID 17656 not found in process
+[0318/190656.597:ERROR:process_reader_win.cc(123)] NtOpenThread: {Access Denied} A process has requested access to an object, but has not been granted those access rights. (0xc0000022)
+[0318/190656.597:ERROR:exception_snapshot_win.cc(98)] thread ID 32348 not found in process

BIN
examples/DropsTestRunDefinition.xlsx


+ 2 - 2
examples/globals.json

@@ -1,8 +1,8 @@
 {
     "exportFilesBasePath": "",
     "TC.Lines": "",
-    "TC.dontCloseBrowser": "True",
     "TC.slowExecution": "True",
     "TC.NetworkInfo": "True",
-    "TX.DEBUG": "True"
+    "TC.dontCloseBrowser": "True",
+    "TC.Browser": "CHROME"
 }

+ 3 - 1
examples/globalsAPI.json

@@ -1,4 +1,6 @@
 {
     "exportFilesBasePath": "",
-    "TC.Lines": ""
+    "TC.Lines": "",
+    "TC.dontCloseBrowser": "",
+    "TC.slowExecution": ""
 }

BIN
server.log