porcupine/binding/web/tests/en-factory/selenium_test.py
Go to the documentation of this file.
1 #!/usr/bin/python3
2 
3 import os
4 import sys
5 import threading
6 import time
7 from argparse import ArgumentParser
8 from http.server import HTTPServer, SimpleHTTPRequestHandler
9 
10 from selenium import webdriver
11 from selenium.common.exceptions import WebDriverException
12 from selenium.webdriver.chrome.options import Options
13 from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
14 from selenium.webdriver.common.by import By
15 from selenium.webdriver.support.ui import WebDriverWait
16 from selenium.webdriver.support import expected_conditions as EC
17 from webdriver_manager.chrome import ChromeDriverManager
18 
19 
20 class SimpleHttpServer(threading.Thread):
21  def __init__(self, host='localhost', port=4001, path='.'):
22  self._base_url = f'http://{host}:{port}'
23  self._root_path = path
24  self._cwd = os.getcwd()
25  self._server = HTTPServer((host, port), SimpleHTTPRequestHandler)
26  super().__init__(daemon=True)
27 
28  @property
29  def base_url(self):
30  return self._base_url
31 
32  def run(self):
33  os.chdir(self._root_path)
34  print(f'starting server on port {self._server.server_port}')
35  self._server.serve_forever()
36 
37  def stop(self):
38  os.chdir(self._cwd)
39  self._server.shutdown()
40  self._server.socket.close()
41  print(f'stopping server on port {self._server.server_port}')
42 
43 
44 def run_unit_test_selenium(url, access_key, absolute_audio_file):
45  desired_capabilities = DesiredCapabilities.CHROME
46  desired_capabilities['goog:loggingPrefs'] = {'browser': 'ALL'}
47  opts = Options()
48  opts.headless = True
49  driver = webdriver.Chrome(ChromeDriverManager().install(), desired_capabilities=desired_capabilities, options=opts)
50 
51  driver.get(url)
52  assert "unit test" in driver.title
53 
54  wait = WebDriverWait(driver, 10)
55 
56  driver.find_element_by_id("audioFile").send_keys(absolute_audio_file)
57  wait.until(EC.visibility_of_element_located((By.ID, "audioLoaded")))
58 
59  driver.find_element_by_id("accessKey").send_keys(access_key)
60  driver.find_element_by_id("sumbit").click()
61  wait.until(EC.visibility_of_element_located((By.ID, "testComplete")))
62 
63  test_result = 1
64  test_message = "Tests failed"
65  for entry in driver.get_log('browser'):
66  print(entry['message'])
67  if 'Test passed!' in entry['message']:
68  test_message = "Tests passed"
69  test_result = 0
70 
71  driver.close()
72  print(test_message)
73  return test_result
74 
75 
76 def main():
77  parser = ArgumentParser()
78 
79  parser.add_argument(
80  '--access_key',
81  required=True)
82  parser.add_argument(
83  '--audio_file',
84  required=True)
85 
86  args = parser.parse_args()
87 
88  absolute_audio_file = os.path.abspath(args.audio_file)
89 
90  simple_server = SimpleHttpServer(port=4005, path=os.path.join(os.path.dirname(__file__), '..', '..'))
91  test_url = f'{simple_server.base_url}/porcupine-web-en-factory/test/index.html'
92  simple_server.start()
93  time.sleep(4)
94 
95  result = 0
96  try:
97  result = run_unit_test_selenium(test_url, args.access_key, absolute_audio_file)
98  except Exception as e:
99  print(e)
100  result = 1
101  finally:
102  simple_server.stop()
103  sys.exit(result)
104 
105 
106 if __name__ == '__main__':
107  main()
selenium_test.SimpleHttpServer.stop
def stop(self)
Definition: porcupine/binding/web/tests/en-factory/selenium_test.py:37
selenium_test.SimpleHttpServer._base_url
_base_url
Definition: porcupine/binding/web/tests/en-factory/selenium_test.py:22
selenium_test.SimpleHttpServer.run
def run(self)
Definition: porcupine/binding/web/tests/en-factory/selenium_test.py:32
selenium_test.SimpleHttpServer._server
_server
Definition: porcupine/binding/web/tests/en-factory/selenium_test.py:25
selenium_test.run_unit_test_selenium
def run_unit_test_selenium(url, access_key, absolute_audio_file)
Definition: porcupine/binding/web/tests/en-factory/selenium_test.py:44
selenium_test.main
def main()
Definition: porcupine/binding/web/tests/en-factory/selenium_test.py:76
selenium_test.SimpleHttpServer._cwd
_cwd
Definition: porcupine/binding/web/tests/en-factory/selenium_test.py:24
selenium_test.SimpleHttpServer.__init__
def __init__(self, host='localhost', port=4001, path='.')
Definition: porcupine/binding/web/tests/en-factory/selenium_test.py:21
main
Definition: main.py:1
selenium_test.SimpleHttpServer._root_path
_root_path
Definition: porcupine/binding/web/tests/en-factory/selenium_test.py:23
selenium_test.SimpleHttpServer
Definition: porcupine/binding/web/tests/en-factory/selenium_test.py:20
selenium_test.SimpleHttpServer.base_url
def base_url(self)
Definition: porcupine/binding/web/tests/en-factory/selenium_test.py:29


picovoice_driver
Author(s):
autogenerated on Fri Apr 1 2022 02:14:50