def analyze_element(self, el: WebElement):
        plan_id = el.find_element_by_id('SelectedPlanId').get_attribute(
            'value')

        price_element = el.find_element_by_id('averageRate-{}'.format(plan_id))
        price = price_element.text

        plan_element = el.find_element_by_xpath(
            './div[@class="row"]/div[1]/div[2]/strong')
        product_name = plan_element.text

        collapse_btn = self.wait_until(
            '//button[@aria-controls="collapse-{}"]'.format(plan_id), By.XPATH)
        self.client.execute_script("arguments[0].click();", collapse_btn)

        term_element = self.wait_until(
            '//div[@id="collapse-{}"]/div[1]/div[1]/div[3]'.format(plan_id),
            By.XPATH)
        term = term_element.text
        match = re.search(r'(\d+)\s+Months', term)
        if match:
            term = match.groups()[0]
        else:
            raise Exception("Term could not match. (%s)" % term)

        efl_download_link_element = self.wait_until(
            '//div[@id="collapse-{}"]/div[2]/div[1]/a'.format(plan_id),
            By.XPATH)
        efl_download_link_element.click()

        return {
            'term': term,
            'price': price,
            'product_name': product_name,
        }
예제 #2
0
    def analyze_element(self, el: WebElement):
        # term
        term_element = el.find_element_by_css_selector(
            'div.pricing-table-value-small.ng-binding')
        term_full_text = term_element.text
        unit_text = term_element.find_element_by_xpath('.//span').text
        term_text_index = len(term_full_text) - len(unit_text)
        term = term_full_text[:term_text_index].rstrip()

        # price
        price_element = el.find_element_by_css_selector(
            'div.pricing-table-value.ng-binding')
        price_full_text = price_element.text
        currency_text = price_element.find_element_by_xpath('.//sup').text
        price_text_index = len(price_full_text) - len(currency_text)
        price = price_full_text[:price_text_index].rstrip()

        # product
        product_name = el.find_element_by_css_selector(
            'h1.pricing-table-title').text

        # download
        # close the survey dialog box if it is open
        decline_button = self.client.find_element_by_id("mcx_decline")
        if decline_button and decline_button.is_displayed():
            decline_button.click()

        # open modal for getting download link
        signup_form = el.find_element_by_id('signupForm')
        modal_link_element = signup_form.find_element_by_xpath('.//a')
        modal_link_element.click()

        dialog_element = self.client.find_element_by_css_selector(
            'div.modal.active')
        link_element = dialog_element.find_elements_by_xpath(
            './/div//div[@class="modal-body"]/'
            'p[@class="modal-link-container"]/a')[-1]
        link_element.click()

        # close the modal
        button = dialog_element.find_element_by_css_selector(
            'a.plan-modal-link-close')
        button.click()

        return {
            'term': term,
            'price': price,
            'product_name': product_name,
        }
 def get_element_static(target_element: WebElement, verifier: SelecElement) -> WebElement:
     try:
         element = None
         if verifier.element_type == NavEleType.IsId:
             element = target_element.find_element_by_id(verifier.target)
         elif verifier.element_type == NavEleType.IsClass:
             element = target_element.find_element_by_class_name(verifier.target)
         elif verifier.element_type == NavEleType.IsCssSelector:
             element = target_element.find_element_by_css_selector(verifier.target)
         elif verifier.element_type == NavEleType.IsName:
             element = target_element.find_element_by_name(verifier.target)
         else:
             raise ValueError("Selector not Supported")
         return element
     except Exception as inst:
         print(type(inst))
         print(inst.args)
         return None
 def get_element_static(target_element: WebElement,
                        verifier: SelecElement) -> WebElement:
     try:
         element = None
         if verifier.element_type == NavEleType.IsId:
             element = target_element.find_element_by_id(verifier.target)
         elif verifier.element_type == NavEleType.IsClass:
             element = target_element.find_element_by_class_name(
                 verifier.target)
         elif verifier.element_type == NavEleType.IsCssSelector:
             element = target_element.find_element_by_css_selector(
                 verifier.target)
         elif verifier.element_type == NavEleType.IsName:
             element = target_element.find_element_by_name(verifier.target)
         else:
             raise ValueError("Selector not Supported")
         return element
     except Exception as inst:
         print(type(inst))
         print(inst.args)
         return None
예제 #5
0
 def getElementById(self,
                    id: str,
                    maxTry: int = 30,
                    waitPerTry: int = 2,
                    element: WebElement = None,
                    raiseException=True) -> WebElement:
     exit = False
     while not exit:
         try:
             if element:
                 result = element.find_element_by_id(id)
             else:
                 result = self.driver.find_element_by_id(id)
             return result
         except Exception as e:
             maxTry -= 1
             if maxTry == 0:
                 if raiseException:
                     raise e
                 else:
                     break
         exit = self.sleep(waitPerTry)
예제 #6
0
    def analyze_element(self, el: WebElement):
        detail_btn = self.wait_until(
            '//button[@aria-controls="expander-2"]',
            By.XPATH
        )
        detail_btn.click()
        detail_element = el.find_element_by_id('expander-2')
        term_element = detail_element.find_element_by_xpath(
            '//strong[contains(text(), "Term")]/following-sibling::div')
        term = term_element.text
        match = re.search(r'(\d+)\s+Month', term)
        if match:
            term = match.groups()[0]
        elif term == 'Month to month':
            term = '1'
        else:
            raise Exception("Term could not match. (%s)" % term)

        price_element = el.find_element_by_css_selector(
            'div > div:nth-child(1) > h2 > span')
        price = price_element.text.split("¢")[0]

        plan_element = detail_element.find_element_by_xpath(
            '//strong[contains(text(), "Plan name")]/following-sibling::div')
        product_name = plan_element.text

        pdf_url = detail_element.find_element_by_xpath(
            '//strong[contains(text(), "Plan documents")]' +
            '/following-sibling::ul/' +
            'li/a[contains(text(), "Electricity Facts Label")]'
            ).get_attribute('href')
        self.client.get(pdf_url)

        return {
            'term': term,
            'price': price,
            'product_name': product_name,
        }
예제 #7
0
 def get_calendar_for_month(self, cal: WebElement, month_id: str) -> WebElement:
     month_select_list = cal.find_element_by_id(self.MONTH_SELECT_LIST_ID)
     month_option = month_select_list.find_element_by_xpath(
         '//select[@id="%s"]/option[@value="%s"]' % (self.MONTH_SELECT_LIST_ID, month_id))
     return self.get_calendar(refresh_button=month_option)
예제 #8
0
def process_hire(hire: WebElement, table: WebElement) -> None:
    detail_id = hire.get_attribute("id").replace("hire", "detail")
    detail = table.find_element_by_id(detail_id)
    print(hire.get_attribute("outerHTML"))
    print(detail.get_attribute("outerHTML"))
    print("---------------------------------------")