コード例 #1
0
class DriverThread(Thread):
    def __init__(self, queue):
        super(DriverThread, self).__init__()
        self.queue = queue
        proxyServer = 'localhost:8080'
        proxy = Proxy()
        proxy.setHttpProxy(proxyServer)
        proxy.setSslProxy(proxyServer)
        capabilities = DesiredCapabilities()
        capabilities.setCapability(CapabilityType.PROXY, proxy)
        self.driver = FirefoxDriver(capabilities)

    def run(self):
        firstRun = True
        while True:
            url = self.queue.get()
            if not firstRun:
                self._acceptAlerts()
            elif firstRun:
                firstRun = False
            if not url:
                break
            sys.stdout.write('Fetching %s... ' % url)
            self.driver.get(url)
            print 'done.'
            self.queue.task_done()
        self.queue.task_done()
        self.driver.close()

    def _acceptAlerts(self):
        print '\n------ BEGIN ALERTS ------\n'
        while True:
            try:
                alert = self.driver.switchTo().alert()
                print 'javascript:alert(%s);' % repr(alert.getText())
                alert.dismiss()
            except NoAlertPresentException:
                print '\n------ END ALERTS ------\n'
                self.driver.switchTo().defaultContent()
                return
コード例 #2
0
ファイル: realRender.py プロジェクト: allfro/browserRepeater
class DriverThread(Thread):
    def __init__(self, queue):
        super(DriverThread, self).__init__()
        self.queue = queue
        proxyServer = 'localhost:8080'
        proxy = Proxy()
        proxy.setHttpProxy(proxyServer)
        proxy.setSslProxy(proxyServer)
        capabilities = DesiredCapabilities()
        capabilities.setCapability(CapabilityType.PROXY, proxy)
        self.driver = FirefoxDriver(capabilities)

    def run(self):
        firstRun = True
        while True:
            url = self.queue.get()
            if not firstRun:
                self._acceptAlerts()
            elif firstRun:
                firstRun = False
            if not url:
                break
            sys.stdout.write('Fetching %s... ' % url)
            self.driver.get(url)
            print 'done.'
            self.queue.task_done()
        self.queue.task_done()
        self.driver.close()

    def _acceptAlerts(self):
        print '\n------ BEGIN ALERTS ------\n'
        while True:
            try:
                alert = self.driver.switchTo().alert()
                print 'javascript:alert(%s);' % repr(alert.getText())
                alert.dismiss()
            except NoAlertPresentException:
                print '\n------ END ALERTS ------\n'
                self.driver.switchTo().defaultContent()
                return
コード例 #3
0
class InewSelenium2Library:

    ROBOT_LIBRARY_SCOPE = 'TEST CASE'
    ROBOT_LIBRARY_VERSION = '0.2'


    def __init__(self): 

        self._logger = logging.getLogger('scope.name')
        file_log_handler = logging.FileHandler('logfile.log')
        self._logger.addHandler(file_log_handler)
        stderr_log_handler = logging.StreamHandler()
        self._logger.addHandler(stderr_log_handler)
        formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
        file_log_handler.setFormatter(formatter)
        stderr_log_handler.setFormatter(formatter)

        self.__firefoxDriver=None
        self._speed = 0.4



    def open_browser(self, url, browser):
        #self._logger.error('open_browser(' + url + ', ' + browser +')')
        self.__firefoxDriver=FirefoxDriver()
        self.__firefoxDriver.get(url)


    def maximize_browser_window(self):
        #self._logger.error('maximize_browser_window()')
        #self.__firefoxDriver.maximize_window()
        dosomething='here'

    def close_browser(self):
        #self.__firefoxDriver.close(url)
        #TODO: Find out why the Browser instance is not killed by close()
        #self.__firefoxDriver.close()
        self.__firefoxDriver.quit()
        self.__firefoxDriver = None




    def set_selenium_speed(self, seconds):
        #self._logger.error('set_selenium_speed()')
        self._speed=seconds

    def get_selenium_speed(self):
        return self._speed


    def save_screenshot(self, filepath):
        tempfile = self.__firefoxDriver.getScreenshotAs(OutputType.FILE)
        FileUtils.copyFile(tempfile, File(filepath))

  
    def input_text(self, locator, text):
        #self._logger.error('input_text(' + locator + ', ' + text+')')
        element = self._find_element(locator)
        element.sendKeys(text);



    def go_to(self, url):
        #self._logger.error('go_to(' + url + ')')
        self.__firefoxDriver.get(url)

    def click_element(self, locator):
        #self._logger.error('click_element(' + locator + ')')
        element = self._find_element(locator)
        element.click();


    def page_contains_element(self, locator): 
        return self._is_element_present(locator)     


    def wait_until_page_contains_element(self, locator, timeout=None, error=None):
        if not error:
            error = "Element '%s' did not appear in <TIMEOUT>" % locator
        self._wait_until(timeout, error, self._is_element_present, locator)



    def select_frame(self, locator):
        #self._logger.error('select_frame(' + locator + ')')
        element = self._find_element(locator)
        #self.__firefoxDriver.switch_to_frame(element)
        self.__firefoxDriver.switchTo().frame(element)


    def unselect_frame(self):
        #self.__firefoxDriver.switch_to_default_content()
        self.__firefoxDriver.switchTo().defaultContent() 



    def get_table_cell(self, table_locator, row, column, loglevel='INFO'):
        #self._logger.error('get_table_cell(' + table_locator + ', ' + row + ', ' + column  + ')')
        row = int(row)
        row_index = row - 1
        column = int(column)
        column_index = column - 1
        tableElement = self._find_element(table_locator)
        if tableElement is not None:
            rows = tableElement.findElementsByXPath("./thead/tr")
            if row_index >= len(rows): rows.addAll(tableElement.findElementsByXPath("./tbody/tr"))
            if row_index >= len(rows): rows.addAll(tableElement.findElementsByXPath("./tfoot/tr"))
            if row_index < len(rows):
                columns = rows[row_index].findElementsByTagName('th')
                if column_index >= len(columns): columns.addAll(rows[row_index].findElementsByTagName('td'))
                if column_index < len(columns):
                    return columns[column_index].text

        raise AssertionError("Cell in table %s in row #%s and column #%s could not be found."
            % (table_locator, str(row), str(column)))


############### private ###################

    def _find_element(self, locator):

        splitLocator=locator.split("=") #id/name/link=value
        strategy=''
        value=''

        if locator.startswith( '//' ): 
            strategy='xpath'
            value = splitLocator[0]         

        elif len(splitLocator)==2:
            strategy=splitLocator[0]
            value = splitLocator[1]

        else:   #default strategy
            strategy='id'
            value = splitLocator[0]

        element = None

        if strategy == 'id':
            #element = self.__firefoxDriver.findElement(By.id(value))
            element = self.__firefoxDriver.findElementById(value)

        elif strategy == 'name':
            #element = self.__firefoxDriver.findElement(By.name(value))
            element = self.__firefoxDriver.findElementByName(value)

        elif strategy == 'link':
            element = self.__firefoxDriver.findElementByLinkText(value)

        elif strategy == 'xpath':
            element = self.__firefoxDriver.findElementByXPath(locator)

        else:
            raise AssertionError('Unknown locator strategy: ' + locator) 


        return element


    def _wait_until(self, timeout, error, function, *args):
        error = error.replace('<TIMEOUT>', self._format_timeout(timeout))
        def wait_func():
            return None if function(*args) else error
        self._wait_until_no_error(timeout, wait_func)

    def _wait_until_no_error(self, timeout, wait_func, *args):
        timeout = robot.utils.timestr_to_secs(timeout) if timeout is not None else self._timeout_in_secs
        maxtime = time.time() + timeout
        while True:
            timeout_error = wait_func(*args)
            if not timeout_error: return
            if time.time() > maxtime:
                raise AssertionError(timeout_error)
            time.sleep(0.2)


    def _format_timeout(self, timeout):
        timeout = robot.utils.timestr_to_secs(timeout) if timeout is not None else self._timeout_in_secs
        return robot.utils.secs_to_timestr(timeout)

    def _is_element_present(self, locator):
        elementFound = 'true'
        try:
            element = self._find_element(locator)         
        except:
            elementFound = 'false'
        return elementFound