test_browserHandling.py 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331
  1. import pytest
  2. import platform
  3. from baangt.base import GlobalConstants as GC
  4. from baangt.base.BrowserHandling.BrowserHandling import BrowserDriver
  5. from unittest.mock import patch, MagicMock
  6. from baangt.TestSteps.Exceptions import baangtTestStepException
  7. from baangt.base.BrowserHandling.WebdriverFunctions import WebdriverFunctions
  8. from baangt.base.Utils import utils
  9. browserName = "FIREFOX"
  10. desired_app = [{GC.MOBILE_PLATFORM_NAME: "Android"}, {GC.MOBILE_PLATFORM_NAME: "iOS"}]
  11. mobileApp = ["True", "False"]
  12. mobile_app_setting = {
  13. GC.MOBILE_APP_URL: "test",
  14. GC.MOBILE_APP_PACKAGE: "com.baangt.pytest",
  15. GC.MOBILE_APP_ACTIVITY: "baangt.test",
  16. GC.MOBILE_APP_BROWSER_PATH: "temp"
  17. }
  18. @pytest.fixture
  19. def getdriver():
  20. """ This will return BrowserDriver instance
  21. for below test function
  22. """
  23. return BrowserDriver()
  24. def test_setZoomFactor(getdriver):
  25. """ check if png file created in path """
  26. # create browser
  27. from baangt.base import GlobalConstants as GC
  28. getdriver.createNewBrowser()
  29. getdriver.goToUrl("https://www.baangt.org")
  30. # FInd element by class
  31. getdriver.zoomFactorDesired = True
  32. getdriver.setZoomFactor(lZoomFactor=200)
  33. # TODO add check
  34. getdriver.closeBrowser()
  35. assert not getdriver.browserData.driver
  36. @pytest.mark.skipif(platform.system() != "Windows", reason="Windows Test only")
  37. @pytest.mark.parametrize(("driverName", "browserName"),
  38. [("geckodriver.exe", GC.BROWSER_FIREFOX), ("chromedriver.exe", GC.BROWSER_CHROME)])
  39. def test_downloadDriver_windows(getdriver, driverName, browserName):
  40. from pathlib import Path
  41. import os
  42. from baangt.base.PathManagement import ManagedPaths
  43. # Get Remove Driver File
  44. path = ManagedPaths().getOrSetDriverPath()
  45. fileName = Path(path).joinpath(driverName)
  46. try:
  47. os.remove(fileName)
  48. except:
  49. pass
  50. assert not os.path.isfile(fileName)
  51. # create browser
  52. getdriver.downloadDriver(browserName)
  53. assert os.path.isfile(fileName)
  54. @pytest.mark.skipif(platform.system() == "Windows", reason="Test for Linux and Mac")
  55. @pytest.mark.parametrize(("driverName", "browserName"),
  56. [("geckodriver", GC.BROWSER_FIREFOX), ("chromedriver", GC.BROWSER_CHROME)])
  57. def test_downloadDriver_NonWindows(getdriver, driverName, browserName):
  58. from pathlib import Path
  59. import os
  60. from baangt.base.PathManagement import ManagedPaths
  61. # Get Remove Driver File
  62. path = ManagedPaths().getOrSetDriverPath()
  63. fileName = Path(path).joinpath(driverName)
  64. try:
  65. os.remove(fileName)
  66. except:
  67. pass
  68. assert not os.path.isfile(fileName)
  69. # create browser
  70. getdriver.downloadDriver(browserName)
  71. assert os.path.isfile(fileName)
  72. def test_findBy_class(getdriver):
  73. """ check if png file created in path """
  74. # create browser
  75. from baangt.base import GlobalConstants as GC
  76. getdriver.createNewBrowser() # (mobileType = 'True', desired_app = desired_app)
  77. getdriver.goToUrl("https://www.baangt.org")
  78. # FInd element by class
  79. element, html = getdriver.findBy(class_name="et_pb_menu__wrap", timeout=20, optional=False)
  80. assert element is not None
  81. assert html is not None
  82. getdriver.closeBrowser()
  83. assert not getdriver.browserData.driver
  84. def test_findBy_id(getdriver):
  85. """ check if png file created in path """
  86. # create browser
  87. getdriver.createNewBrowser()
  88. getdriver.goToUrl("https://www.baangt.org/contact/")
  89. # FInd element by id
  90. element, html = getdriver.findBy(id="et_pb_contact_name_0", timeout=20, optional=False)
  91. assert "input" == element.tag_name
  92. assert "html" == html.tag_name
  93. getdriver.closeBrowser()
  94. assert not getdriver.browserData.driver
  95. def test_findByAndClick(getdriver):
  96. """ check if png file created in path """
  97. # create browser
  98. getdriver.createNewBrowser()
  99. getdriver.goToUrl("https://www.baangt.com")
  100. # FInd element by xpath
  101. result = getdriver.findByAndClick(xpath="//a[text()='Uncategorized']", timeout=20, optional=False)
  102. # the file name should exist
  103. assert result == True
  104. getdriver.closeBrowser()
  105. assert not getdriver.browserData.driver
  106. def test_slowExecutionToggle(getdriver):
  107. """ Test slowExecution Function """
  108. oldstate = getdriver.slowExecution
  109. # toggle
  110. newstate = getdriver.slowExecutionToggle()
  111. assert newstate != oldstate
  112. def test_takeScreenshot_exception(getdriver):
  113. """
  114. Test takeScreenshot method
  115. """
  116. filename = getdriver.takeScreenshot()
  117. import os
  118. # the file name should not exist
  119. assert not filename
  120. def test_takeScreenshot_filecheck(getdriver):
  121. """ check if png file created in path """
  122. # create browser
  123. getdriver.createNewBrowser()
  124. # take screenshot
  125. getdriver.goToUrl("http://www.google.com")
  126. filename = getdriver.takeScreenshot()
  127. import os
  128. # the file name should exist
  129. assert os.path.isfile(filename)
  130. getdriver.closeBrowser()
  131. assert not getdriver.browserData.driver
  132. def test_setBrowserWindowSizeEmpty(getdriver):
  133. getdriver.createNewBrowser()
  134. result = getdriver.setBrowserWindowSize(browserWindowSize="")
  135. getdriver.closeBrowser()
  136. assert result == False
  137. @pytest.mark.skipif(platform.system() == "Linux", reason="FF on Linux doesn't resize")
  138. def test_setBrowserWindowSizeReal(getdriver):
  139. getdriver.createNewBrowser()
  140. result = getdriver.setBrowserWindowSize("800;600")
  141. getdriver.closeBrowser()
  142. assert result["width"] > 750
  143. assert result["width"] < 850
  144. assert result["height"] > 550
  145. assert result["height"] < 650
  146. def test_setBrowserWindowSizeWrong(getdriver):
  147. getdriver.createNewBrowser()
  148. result = getdriver.setBrowserWindowSize("1234°1231")
  149. getdriver.closeBrowser()
  150. assert result == False
  151. def test_setBrowserWindowSizeWithLeadingStuff(getdriver):
  152. getdriver.createNewBrowser()
  153. result = getdriver.setBrowserWindowSize("--800,--600")
  154. getdriver.closeBrowser()
  155. assert isinstance(result, dict)
  156. def test_setBrowserWindowSizeWithX(getdriver):
  157. getdriver.createNewBrowser()
  158. result = getdriver.setBrowserWindowSize("--800x600")
  159. getdriver.closeBrowser()
  160. assert isinstance(result, dict)
  161. @pytest.mark.parametrize(
  162. "browserName, desired_app, mobileApp, mobile_app_setting",
  163. [
  164. (browserName, desired_app[0], mobileApp[0], mobile_app_setting),
  165. (browserName, desired_app[0], mobileApp[1], mobile_app_setting),
  166. (browserName, desired_app[1], mobileApp[0], mobile_app_setting),
  167. (browserName, desired_app[1], mobileApp[1], mobile_app_setting)
  168. ]
  169. )
  170. def test_mobileConnectAppium(browserName, desired_app, mobileApp, mobile_app_setting):
  171. wdf = WebdriverFunctions
  172. with patch.dict(wdf.BROWSER_DRIVERS, {GC.BROWSER_APPIUM: MagicMock}):
  173. BrowserDriver._mobileConnectAppium(browserName, desired_app, mobileApp, mobile_app_setting)
  174. assert 1 == 1
  175. def test_handleIframe(getdriver):
  176. getdriver.browserData = MagicMock()
  177. getdriver.handleIframe("test")
  178. assert 1 == 1
  179. getdriver.iFrame = "test"
  180. getdriver.handleIframe()
  181. assert 1 == 1
  182. def test_checkLinks(getdriver):
  183. getdriver.browserData = MagicMock()
  184. getdriver.browserData.driver.find_elements_by_css_selector.return_value = [MagicMock()]
  185. getdriver.checkLinks()
  186. assert 1 == 1
  187. def test_waitForPageLoadAfterButtonClick(getdriver):
  188. getdriver.browserData = MagicMock()
  189. getdriver.html = "test"
  190. getdriver.waitForPageLoadAfterButtonClick()
  191. assert 1 == 1
  192. @pytest.mark.parametrize("function", [("close"), ("closeall-0"), ("")])
  193. def test_handleWindow(function, getdriver):
  194. getdriver.browserData = MagicMock()
  195. getdriver.browserData.driver.window_handles = ["test", "test"]
  196. if function == "":
  197. with pytest.raises(baangtTestStepException):
  198. getdriver.handleWindow(function=function)
  199. getdriver.refresh()
  200. else:
  201. getdriver.handleWindow(function=function)
  202. assert 1 == 1
  203. def test_findNewFiles(getdriver):
  204. from baangt.base.DownloadFolderMonitoring import DownloadFolderMonitoring
  205. getdriver.downloadFolderMonitoring = DownloadFolderMonitoring(getdriver.downloadFolder)
  206. result = getdriver.findNewFiles()
  207. assert type(result) == list
  208. def test_getURL(getdriver):
  209. result = getdriver.getURL()
  210. assert result
  211. @pytest.mark.parametrize("css, xpath, id", [("test", None, None), (None, "test", None), (None, None, "test")])
  212. def test_findWaitNotVisible(css, xpath, id, getdriver):
  213. getdriver.browserData = MagicMock()
  214. result = getdriver.findWaitNotVisible(css, xpath, id)
  215. assert type(result) == bool
  216. @pytest.mark.parametrize("browser", ["firefox", "chrome"])
  217. def test_createNewBrowser(browser, getdriver):
  218. with patch.dict(WebdriverFunctions.BROWSER_DRIVERS, {GC.BROWSER_REMOTE: MagicMock}):
  219. getdriver.createNewBrowser(browserName="REMOTE_V4", desiredCapabilities={"browserName": browser})
  220. assert 1 == 1
  221. @patch.object(utils, "setLocatorFromLocatorType")
  222. def test_waitForElementChangeAfterButtonClick(mock_utils, getdriver):
  223. mock_utils.return_value = (1, 2, 3)
  224. getdriver.findBy = MagicMock()
  225. id = MagicMock()
  226. getdriver.findBy.return_value = (id, '1234')
  227. getdriver.element = MagicMock()
  228. getdriver.element.id = "xxxx"
  229. id.id = "1234"
  230. getdriver.waitForElementChangeAfterButtonClick(timeout=0.1)
  231. assert 1 == 1
  232. @pytest.mark.parametrize("css, xpath, id", [("x", None, None), (None, "x", None), (None, None, "x")])
  233. def test_findWaitNotVisible(css, xpath, id, getdriver):
  234. getdriver.browserData = MagicMock()
  235. getdriver.findWaitNotVisible(css, xpath, id, timeout=1)
  236. assert 1 == 1
  237. def test_findByAndForceViaJS(getdriver):
  238. getdriver.browserData = MagicMock()
  239. getdriver.findByAndForceViaJS(xpath="Test")
  240. assert 1 == 1
  241. def test_findByAndForceText(getdriver):
  242. getdriver.findBy = MagicMock()
  243. getdriver.findBy.return_value = False, True
  244. getdriver.findByAndForceText()
  245. assert 1 == 1
  246. def test_findByAndSetTextValidated(getdriver):
  247. getdriver.findBy = MagicMock()
  248. getdriver.findByAndForceText = MagicMock()
  249. getdriver.findBy.return_value = MagicMock(), "def"
  250. getdriver.findBy.return_value[0].text = "abc"
  251. getdriver.findBy.return_value[0].get_property.return_value = "abc"
  252. getdriver.findByAndSetTextValidated(value="123")