rhino/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_ic_audio_file, absolute_ooc_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, 3600)
55 
56  driver.find_element_by_id("inContextAudioFile").send_keys(absolute_ic_audio_file)
57  wait.until(EC.visibility_of_element_located((By.ID, "inContextAudioLoaded")))
58 
59  driver.find_element_by_id("oocAudioFile").send_keys(absolute_ooc_audio_file)
60  wait.until(EC.visibility_of_element_located((By.ID, "oocAudioLoaded")))
61 
62  driver.find_element_by_id("accessKey").send_keys(access_key)
63  driver.find_element_by_id("submit").click()
64  wait.until(EC.visibility_of_element_located((By.ID, "testComplete")))
65 
66  test_result = 1
67  test_message = "Tests failed"
68  for entry in driver.get_log('browser'):
69  print(entry['message'])
70  if 'Test passed!' in entry['message']:
71  test_message = "Tests passed"
72  test_result = 0
73 
74  driver.close()
75  print(test_message)
76  return test_result
77 
78 
79 def main():
80  parser = ArgumentParser()
81 
82  parser.add_argument(
83  '--access_key',
84  required=True)
85  parser.add_argument(
86  '--audio_file_in_context',
87  required=True)
88  parser.add_argument(
89  '--audio_file_out_context',
90  required=True)
91 
92  args = parser.parse_args()
93 
94  absolute_ic_audio_file = os.path.abspath(args.audio_file_in_context)
95  absolute_ooc_audio_file = os.path.abspath(args.audio_file_out_context)
96 
97  simple_server = SimpleHttpServer(port=4005, path=os.path.join(os.path.dirname(__file__), '..', '..'))
98  test_url = f'{simple_server.base_url}/rhino-web-en-factory/test/index.html'
99  simple_server.start()
100  time.sleep(4)
101 
102  result = 0
103  try:
104  result = run_unit_test_selenium(test_url,
105  args.access_key,
106  absolute_ic_audio_file,
107  absolute_ooc_audio_file)
108  except Exception as e:
109  print(e)
110  result = 1
111  finally:
112  simple_server.stop()
113  sys.exit(result)
114 
115 
116 if __name__ == '__main__':
117  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