| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- from selenium import webdriver
- from selenium.webdriver.chrome.service import Service
- from selenium.webdriver.common.keys import Keys
- from selenium.webdriver.support.ui import WebDriverWait
- from selenium.webdriver.support import expected_conditions as EC
- import logging
- from conf import path
- from . import url, loc
- class Robot:
- def __init__(self):
- service = Service(path.chromedriver, log_path=path.chromedriver_log)
- self.driver = webdriver.Chrome(service=service)
- self.driver.implicitly_wait(10)
- self.wait = WebDriverWait(self.driver, 10)
-
- def wait_to_click(self, loc):
- return self.wait.until(EC.element_to_be_clickable(loc))
-
- def login(self, username, password):
- logging.info('login...')
- self.driver.get(url.logout)
- self.driver.get(url.login)
- self.driver.switch_to.frame('loginIframe')
- self.wait_to_click(loc.password_login_tab).click()
- self.wait_to_click(loc.username).send_keys(username)
- self.wait_to_click(loc.password).send_keys(password + Keys.RETURN)
- self.wait.until(EC.url_to_be(url.uc_index))
- logging.info('login successful')
-
- def punch(self, username, password, at_school, risky, geolocation):
- self.login(username, password)
- self.driver.execute_cdp_cmd('Emulation.setGeolocationOverride', geolocation)
- self.driver.get(url.ncov)
- school_loc = loc.is_at_school if at_school else loc.not_at_school
- risk_loc = loc.risky if risky else loc.no_risk
- self.wait_to_click(school_loc).click()
- self.wait_to_click(risk_loc).click()
- self.wait_to_click(loc.geolocation).click()
- self.wait.until(EC.invisibility_of_element_located((loc.loading)))
- btn = self.wait_to_click(loc.submit_button)
- btn.click()
- if not btn.get_attribute('class'):
- self.wait_to_click(loc.submit_confirm_button).click()
- self.wait.until(EC.invisibility_of_element_located(loc.loading))
- result = self.wait.until(EC.visibility_of_element_located(loc.result)).text
- return result
-
- def quit(self):
- self.driver.quit()
-
- def test_geolocation(self, geolocation):
- self.driver.get(url.geolocation)
- self.driver.execute_cdp_cmd('Emulation.setGeolocationOverride', geolocation)
- self.driver.switch_to.frame('iframeResult')
- self.wait_to_click((loc.By.TAG_NAME, 'button')).click()
- from time import sleep
- sleep(5)
- result = self.driver.find_element(loc.By.ID, 'demo').text
- return result
|