예제 #1
0
    def _download_file(self, xpath):
        print "Download file"
        d = self.driver
        """ Downloads a file given an xpath to the download link
        """
        file_list_before = os.listdir(self.download_dir)

        # Download file
        def download_file():
            export_btn = d.find_element_by_xpath_patiently(xpath)
            export_btn.click()

        def get_filename():
            file_list_after = os.listdir(self.download_dir)
            diff = list(set(file_list_after) - set(file_list_before))
            if len(diff) == 0:
                raise DownloadError
            else:
                file_name = diff[0]
                if ".part" in file_name:
                    raise DownloadError
                else:
                    return file_name

        patiently(download_file, NoSuchElementException, seconds=3)
        file_name = patiently(get_filename, DownloadError)

        return self.download_dir + "/" + file_name
예제 #2
0
    def _select_year_month(self, year, month):
        year_month = "%s-%02d" % (year, month)
        print "Select year-month (%s)" % year_month

        def click_month_list():
            xpath = "//div[contains(@title,'Månad')]"
            month_list = self.driver.find_elements_by_xpath_patiently(xpath)[1]
            month_list.click()
            sleep(self.sleep)
            return month_list

        #def select_year_month():

        def click_year_month():
            month_list.send_keys(year_month)
            elem = self.driver.find_element_by_xpath_patiently(
                "//div[@title='%s']" % year_month)
            elem.click()
            sleep(self.sleep)

        month_list = patiently(click_month_list,
                               IndexError,
                               exception_to_raise=XPathError)
        #patiently(select_year_month, (ElementNotVisibleException, StaleElementReferenceException))
        patiently(click_year_month,
                  (ElementNotVisibleException, StaleElementReferenceException))
예제 #3
0
    def _select_foreign_only(self):
        print "Select foreign only"

        def select_foreign_only():
            elem = self.driver.find_elements_by_xpath_patiently(
                "//div[@title='Utrikesfödda']")[-1]
            elem.click()

        sleep(self.sleep)
        patiently(select_foreign_only, NoSuchElementException)
예제 #4
0
    def _select_youth_only(self):
        print "Select youth only"

        def select_youth_only():
            elem = self.driver.find_elements_by_xpath_patiently(
                "//div[@title='18-24 år']")[-1]
            elem.click()

        sleep(self.sleep)
        patiently(select_youth_only, NoSuchElementException)
예제 #5
0
    def _select_municipality(self, municipality):
        print "Select municipality (%s)" % municipality

        def select_municpality():
            muni_list.send_keys(municipality)

        def click_municpality():
            elem = self.driver.find_element_by_xpath_patiently(
                "//div[@title='%s']/../.." % municipality)
            elem.click()

        muni_list = self.driver.find_element_by_xpath_patiently(
            "//div[contains(@title,'Välj kommun')]")
        muni_list.click()
        patiently(select_municpality, StaleElementReferenceException)
        patiently(click_municpality, NoSuchElementException)
예제 #6
0
    def get_detailed(self,
                     municipality=None,
                     county=None,
                     year=None,
                     month=None,
                     youth_only=False,
                     foreign_only=False):
        d = self.driver
        self._open_start_page()

        # Select municipality
        if (municipality):
            self._select_municipality(municipality)

        # Select year-month
        if year and month:
            self._select_year_month(year, month)

        if youth_only:
            self._select_youth_only()

        if foreign_only:
            self._select_foreign_only()

        downloaded_file = self._download_file(
            "//td[contains(text(),'Exportera till Excel')]")

        def parse_downloaded():
            return DetailedTable().parse_downloaded_file(downloaded_file)

        print downloaded_file
        data = patiently(parse_downloaded, IndexError)

        # Dismiss dialog
        try:
            close_btn = d.find_element_by_xpath_patiently(
                "//button[text()='OK']")
            close_btn.click()
        except:
            pass

        return data
예제 #7
0
    def _get_overview(self,
                      year=None,
                      month=None,
                      youth_only=False,
                      foreign_only=False):
        data = OverviewTable()
        d = self.driver
        self._open_start_page()

        sleep(self.sleep)
        tab_elem = self.driver.find_element_by_xpath_patiently(
            '//td[text()="Utskriftsrapporter"]')
        tab_elem.click()
        sleep(self.sleep)

        # Select year-month
        if year and month:
            self._select_year_month(year, month)

        if youth_only:
            self._select_youth_only()

        if foreign_only:
            self._select_foreign_only()

        def parse_downloaded():
            return data.parse_downloaded_file(downloaded_file)

        # [1] = "Arbetssökande antal/andel av befolkningen"
        # [2] = "Arbetssökande antal/andel av den registerbaserade arbetskraften"
        xpath = "(//td[contains(text(),'Exportera till Excel')])[2]"
        downloaded_file = self._download_file(xpath)
        data = patiently(parse_downloaded, IndexError)
        data.verify(year=year,
                    month=month,
                    youth_only=youth_only,
                    foreign_only=foreign_only)

        return data