Example #1
0
    def click_menu_option_by_visible_text(self, menu_locator, list_of_menu_options):
        """
        Performs support move_to_element action on every link <support...> contained in
        menu_locator if its visible text matches any of the names defined in
        list_of_menu_options and clicks on the last matching link.

        :param menu_locator:
        :param list_of_menu_options: 
        """
        menu_options = self.driver.find_elements(*menu_locator)
        actions = ActionChains(self.driver)
        menu_index = 0
        expected_option = None
        for option in menu_options:
            if menu_index >= len(list_of_menu_options):
                break
            if expected_option is None:
                expected_option = list_of_menu_options[menu_index].strip()

            if option.get_attribute('title') == expected_option or option.get_attribute(
                    'text') == expected_option or option.text == expected_option:
                actions.move_to_element(option)
                menu_index += 1
                expected_option = None
        actions.click()
        actions.perform()
    def test_tamplate(self):
        ''' Test a situation when unlogged user tries to download a file '''
        item_to_download = WebDriverWait(self.driver, 10).until(
            ec.visibility_of_element_located((By.CLASS_NAME, 'ent-title')))
        
        action = ActionChains(self.driver)
        action.move_to_element(item_to_download)
        action.click(item_to_download)
        action.perform()

        time.sleep(5)

        download_button = self.driver.find_elements_by_class_name('download')
        download_button_1 = download_button[0]
        download_button_2 = download_button[1]

        action = ActionChains(self.driver)
        action.move_to_element(download_button_2)
        action.click(download_button_2)
        action.perform()
        time.sleep(8)

        #Alert message
        try:
            alert_message = WebDriverWait(self.driver, 10).until(
            ec.visibility_of_element_located((By.CLASS_NAME, 'xw-hdr-text')))
        finally:
            print ('oops')
Example #3
0
    def _select_case(self, role, case):
        """Select the test case.
        """
        # select the case
        elem = Select(self._browser.find_element_by_id('select-dut'))
        elem.select_by_value(str(role))
        time.sleep(1)

        checkbox = None
        wait_until(lambda: self._browser.find_elements_by_css_selector('.tree-node .tree-title') and True)
        elems = self._browser.find_elements_by_css_selector('.tree-node .tree-title')
        finder = re.compile(r'.*\b' + case + r'\b')
        finder_dotted = re.compile(r'.*\b' + case.replace(' ', r'\.') + r'\b')
        for elem in elems:
            action_chains = ActionChains(self._browser)
            action_chains.move_to_element(elem)
            action_chains.perform()
            logger.debug(elem.text)
            if finder.match(elem.text) or finder_dotted.match(elem.text):
                parent = elem.find_element_by_xpath('..')
                checkbox = parent.find_element_by_class_name('tree-checkbox')
                break

        if not checkbox:
            time.sleep(5)
            raise Exception('Failed to find the case')

        self._browser.execute_script("$('.overview').css('left', '0')")
        checkbox.click()
        time.sleep(1)

        elem = self._browser.find_element_by_id('runTest')
        elem.click()
        if not wait_until(lambda: self._browser.find_element_by_id('stopTest') and True, 10):
            raise Exception('Failed to start test case')
    def _select_case(self, suite, case):
        """Select the test case.
        """
        # select the case
        elem = Select(self._browser.find_element_by_id('select-dut'))
        elem.select_by_value(str(suite))
        time.sleep(1)

        checkbox = None
        elems = self._browser.find_elements_by_css_selector('.tree-node .tree-title')
        for elem in elems:
            action_chains = ActionChains(self._browser)
            action_chains.move_to_element(elem)
            action_chains.perform()
            logger.debug(elem.text)
            if elem.text.startswith(case):
                parent = elem.find_element_by_xpath('..')
                checkbox = parent.find_element_by_class_name('tree-checkbox')
                break

        if not checkbox:
            time.sleep(5)
            raise Exception('Failed to find the case')

        checkbox.click()
        time.sleep(1)

        elem = self._browser.find_element_by_id('runTest')
        elem.click()
        if not self.wait_until(lambda: self._browser.find_element_by_id('stopTest') and True, 10):
            raise Exception('Failed to start test case')
Example #5
0
    def _test_reorder_file_bar(self, page):
        page.add_file([x for x in FILES if x.name == 'test.jpg'][0])

        WebDriverWait(page.driver, 3).until(
            ec.visibility_of_element_located(
                (
                    By.CSS_SELECTOR,
                    'div.grid-canvas div.ui-widget-content.slick-row.odd'
                )
            )
        )

        ac = ActionChains(page.driver)
        a = page.driver.find_elements_by_css_selector(
            'DIV.container DIV.slick-header.ui-state-default DIV.slick-header-columns.ui-sortable SPAN.slick-column-name'
        )[3]
        b = page.driver.find_elements_by_css_selector(
            'DIV.container DIV.slick-header.ui-state-default DIV.slick-header-columns.ui-sortable SPAN.slick-column-name'
        )[0]

        ac.click_and_hold(a).perform()
        a_chain = ActionChains(page.driver)
        a_chain.move_to_element(b).perform()
        a_chain.release(b).perform()

        downloads = page.driver.find_element_by_css_selector(
            'div.grid-canvas div.ui-widget-content.slick-row.odd DIV.slick-cell.l0.r0'
        ).text

        self.assertIn('0', downloads)

        page.close()
Example #6
0
 def test_LoginRead(self):#第二种方法,见main里的注释
     cdr=self.cdr
     Url=self.Url
     cdr.get(Url)
     #cdr.implicitly_wait(5)
     WebDriverWait(cdr,10).until(lambda cdr:cdr.find_element_by_xpath(".//*[@id='J_connect']/div[2]/div/div/span/a[2]"))
     
     fopen=open(r".\something\username.txt","r")
     for us in fopen:#------这里是从文件里进行读取
         time.sleep(2)
         cdr.find_element_by_xpath(".//*[@id='J_connect']/div[2]/div/div/span/a[2]").click()#点击登录
         
         WebDriverWait(cdr,10).until(lambda cdr:cdr.find_element_by_id("email_login"))
         cdr.find_element_by_id("email_login").click()#点击使用邮箱登陆
         print cdr.find_element_by_id("email_login").get_attribute("title")
         
         #输入用户名密码
         time.sleep(2)
         cdr.find_element_by_id("login_email").send_keys(us)
         print "登录用户名为:"+us
         cdr.find_element_by_id("login_password").send_keys("123456")
         cdr.find_element_by_id("remember_me").click()#去掉记住登陆 checkbox
         #点击登录按钮
         cdr.find_element_by_id("login").click()
         
         time.sleep(5)
         #鼠标移动到 头像旁边的下落箭头上
         action=ActionChains(cdr)
         action.move_to_element(cdr.find_element_by_xpath("//div[@class='tr']/div/span[2]")).perform()
         #下拉菜单点击 退出帐号
         cdr.find_element_by_xpath("//div[@class='tr']/div/span[3]/ul/li[4]/a").click()
     fopen.close()
def test_basic_functionality(driver, test_file):
	try:
		#Test page response by clicking the reset button and applying new code to ace-editor

		tt.reset_page(driver)
		tt.update_editor(driver, test_file)
		ens_elements = driver.find_elements_by_xpath('//*[@class="ens"]')
		assert (len(ens_elements) > 0)
		side_script = '''var right = document.getElementById("rightpane"); \
		right.style.width = "200px"
		'''
		driver.execute_script(side_script)

		#Creates graph objects by right clicking on nodes and selecting from menu
		actions = ActionChains(driver)
		elements = ['node', 'ens']
		for elem in elements:
			node = driver.find_element_by_xpath('//*[@class="'+elem+'"]')
			actions = ActionChains(driver)
			actions.move_to_element(node)
			actions.context_click()
			actions.perform()
			time.sleep(1)
			actions = ActionChains(driver)

			menu = driver.find_element_by_xpath('//*[@class="dropdown-menu"]/li[1]')
			actions.move_to_element(menu)
			actions.click()
			actions.perform()
			time.sleep(0.5)

		graph_elements = driver.find_elements_by_xpath('//*[@class="graph"]')

		assert len(graph_elements) > 0
		tt.start_stop_sim(driver)
		time.sleep(1.5)
		tt.start_stop_sim(driver)
		time.sleep(0.5)

		ticker = driver.find_element_by_xpath('//*[@id="ticks_tr"]/td')
		sim_time = ticker.get_attribute('textContent')

		assert (float(sim_time) > 0)

	except Exception as e:
		#Travis Only: On fail takes screenshot and uploads it to imgur


		if('TRAVIS' in os.environ):
			tt.imgur_screenshot(driver)

		_, _, tb = sys.exc_info()
		traceback.print_tb(tb) # Fixed format
		tb_info = traceback.extract_tb(tb)
		filename, line, func, text = tb_info[-1]

		print('An error occurred on line {} in statement {}'.format(line, text))
		print(str(e))
		exit(1)
Example #8
0
File: Auto.py Project: JJ97/Hash
def stop():
	main_window = driver.current_window_handle
	driver.switch_to_window(main_window)
	actions = ActionChains(driver)
	stop = driver.find_element_by_xpath("//span[contains(text(), 'stop')]")
	actions.move_to_element(stop)
	actions.click(stop)
	actions.perform()
Example #9
0
    def implicit_click(self, item):
        actions = ActionChains(self._driver)
        with wait_for_element_visibility(self._driver, item):
            actions.move_to_element(self._base).click().perform()

        # It is needed to clean ActionChains instance after each call of preform()
        actions = ActionChains(self._driver)
        actions.move_to_element(item).click().perform()
Example #10
0
 def click(self, element):
     # Although elements have a click method, it seems to play up, possibly
     # when browser loses focus. Search for "selenium missing click" to get
     # an idea of the problem. Most complaints are on IE, but Chrome seems
     # susceptible as well. The incantation below, with the move operation
     # before the click, seems to work more reliably.
     action_chains = ActionChains(self.browser)
     action_chains.move_to_element(element).click().perform()
Example #11
0
 def setInputText(self, name, value):
     textArea = self.workflow_input.find_element_by_xpath(
         './*[@data-input-name="{0}"]//textarea'.format(name)
         )
     action_chains = ActionChains(self.portal.browser)
     action_chains.move_to_element(textArea).click().send_keys(
         Keys.BACK_SPACE*len(textArea.text)+str(value)
         ).perform()
 def do_it(self):
     
     mouse_move_to_menu_themes = ActionChains(self.driver)
     #mouse_move_to_menu_themes.move_to_element(self.menu)
     mouse_move_to_menu_themes.move_to_element(self.tab)
     mouse_move_to_menu_themes.move_to_element(self.subitem)
     mouse_move_to_menu_themes.click(self.subitem)
     mouse_move_to_menu_themes.perform()
     time.sleep(5)
Example #13
0
 def create_rerun(self, course_key):
     """
     Clicks the create rerun link of the course specified by course_key
     'Re-run course' link doesn't show up until you mouse over that course in the course listing
     """
     actions = ActionChains(self.browser)
     button_name = self.browser.find_element_by_css_selector('.rerun-button[href$="' + course_key + '"]')
     actions.move_to_element(button_name)
     actions.click(button_name)
     actions.perform()
Example #14
0
def test_example(driver):
	# Always include driver as a function parameter.
	# This is the selenium webdriver that will allow
	# you to interact with the webpage.

	tt.reset_page(driver)
	# Most testing_tools functions require driver as an input.
	# Presses the reset button to start the page fresh.
	# Usually useful but not always needed.
	# More documentation on testing_tools can be found
	# in nengo_gui/testing_tools.py

	time.sleep(1)
	# Waits a small amount of time to ensure the page has
	# time to reset.

	tt.update_editor(driver,'''
import nengo

model = nengo.Network()
with model:
    stim = nengo.Node([0])
    a = nengo.Ensemble(n_neurons=50, dimensions=1)
    nengo.Connection(stim, a)
		''')
	# The page will now load this code into the code editor

	stim = driver.find_element_by_xpath('//*[@class="node"]')
	a = driver.find_element_by_xpath('//*[@class="ens"]')
	# Finds the 'stim' and 'a' nodes and saves them as a webElements.

	action = ActionChains(driver)
	# ActionChains allow you to link together multiple mouse events
	# then execute them in that order.

	action.move_to_element(stim);
	action.context_click()
	action.perform()
	time.sleep(1)
	# The stim element has now been right clicked.

	# WARNING: when using ActionChains reinitialize ActionChains
	# after every .perform() call, it is not clear why but
	# ActionChains does not seem to reset properly after this call.

	right_click_menu = driver.find_element_by_xpath('//*[@class="dropdown-menu"]')

	assert(bool(stim) and bool(a) == True)
	# Tests if both elements are present.

	assert(bool(right_click_menu) == True)
	# Tests if stim has been properly clicked

	if('TRAVIS' in os.environ): ########## TRAVIS ONLY
		tt.imgur_screenshot(driver)
Example #15
0
    def mouse_over_to_element(self, locator, index=0):
        """
        Move the mouse over the selected locator.

        :param locator:
        :param index:
        """
        element = self._get_element(locator, index)
        actions = ActionChains(self.driver)
        actions.move_to_element(element)
        actions.perform()
 def click_to_tab_link(self, tab_link):
     mouse_move_to_menu = ActionChains(self.driver)
     mouse_move_to_menu.move_to_element(tab_link)
     mouse_move_to_menu.click(tab_link)
     mouse_move_to_menu.perform()
     time.sleep(5)
     WebDriverWait (self.driver, 10).until(ec.title_is(self.driver.title))
     current_page_info = {}
     current_page_info['current_page_title'] = self.driver.title.encode('utf-8')
     current_page_info['current_url'] = self.driver.current_url
     return (current_page_info)
Example #17
0
    def test_Info(self):
        cdr=self.cdr
        url=self.URL
        cdr.get(url)
        
        WebDriverWait(cdr,10).until(lambda cdr:cdr.find_element_by_xpath(".//*[@id='J_connect']/div[2]/div/div/span/a[2]"))
        time.sleep(2)
        cdr.find_element_by_xpath(".//*[@id='J_connect']/div[2]/div/div/span/a[2]").click()#点击登录
        
        WebDriverWait(cdr,10).until(lambda cdr:cdr.find_element_by_id("email_login"))
        cdr.find_element_by_id("email_login").click()#点击使用邮箱登陆
        print cdr.find_element_by_id("email_login").get_attribute("title")
        
        #输入用户名密码
        time.sleep(2)
        cdr.find_element_by_id("login_email").send_keys("*****@*****.**")
        cdr.find_element_by_id("login_password").send_keys("123456")
        cdr.find_element_by_id("remember_me").click()#去掉记住登陆 checkbox
        #点击登录按钮
        cdr.find_element_by_id("login").click()
        
        time.sleep(5)
        #鼠标移动到 头像旁边的下落箭头上
        action=ActionChains(cdr)
        action.move_to_element(cdr.find_element_by_xpath("//div[@class='tr']/div/span[2]")).perform()

        #下拉菜单点击 个人设置
        cdr.find_element_by_xpath("//div[@class='tr']/div/span[3]/ul/li[3]/a").click()
        #点击专家达人认证 标签
        time.sleep(3)
        cdr.find_element_by_xpath("//div[@class='shelfsetul']/ul/li[6]/a").click()
        
        #全部选中 topka-个人设置-专家达人认证-擅长领域里的 checkbox
        #cdr.find_element_by_xpath("//li[@id='goodat_area']/input[1]").click()
        
        #使用加复数的 find_elements_by_xpath 全部点击一遍 checkbox,下面一共用了三张方法
        for cli in cdr.find_elements_by_xpath("//input[contains(@type,'checkbox')]"):#这个也行"//input[@type='checkbox']"
            cli.click()
        
        #下面是两种方法,基本上这两个方法是等价的 
        #[cdr.find_element_by_xpath("//li[@id='goodat_area']/input"+'['+str(i)+']').click() for i in range(1,9)]
        '''
        for i in range(1,9):
            cdr.find_element_by_xpath("//li[@id='goodat_area']/input"+'['+str(i)+']').click()
        '''
        time.sleep(2)
        #鼠标移动到 头像旁边的下落箭头上
        action=ActionChains(cdr)
        action.move_to_element(cdr.find_element_by_xpath("//div[@class='tr']/div/span[2]")).perform()
        #下拉菜单点击 退出帐号
        cdr.find_element_by_xpath("//div[@class='tr']/div/span[3]/ul/li[4]/a").click()
        
        #最后退出浏览器
        cdr.quit()
Example #18
0
File: Auto.py Project: JJ97/Hash
def run():
	# Ensure current window is the one in focus
	main_window = driver.current_window_handle
	driver.switch_to_window(main_window)
	actions = ActionChains(driver)
	# Find run button
	run = driver.find_element_by_xpath("//span[contains(text(), 'run')]")
	actions.move_to_element(run)
	# Click it
	actions.click(run)
	actions.perform()
Example #19
0
 def runTest(self):
     print("Checking overview page")
     action_chains = ActionChains(self.driver)
     status_menu = self.driver.find_element_by_xpath("//ul/li/a[contains(text(),'Status')]")
     overview_menu = self.driver.find_element_by_xpath("//ul/li/a[contains(text(),'Overview')]")
     action_chains.move_to_element(status_menu).click(overview_menu).perform()
     self.assertIn("Overview", self.driver.title)
     print("Managed to switch to overview page")
     for i in ["System", "Memory", "Network", "DHCP Leases"]:
         self.driver.find_element_by_xpath("//fieldset/legend[contains(text(),'" + i + "')]")
         print(" * overview page contains section " + i)
Example #20
0
 def runTest(self):
     print('Checking overview page')
     action_chains = ActionChains(self.driver)
     status_menu = self.driver.find_element_by_xpath("//ul/li/a[contains(text(),'Status')]")
     overview_menu = self.driver.find_element_by_xpath("//ul/li/a[contains(text(),'Overview')]")
     action_chains.move_to_element(status_menu).click(overview_menu).perform()
     self.assertIn('Overview', self.driver.title)
     print('Managed to switch to overview page')
     for i in [ 'System', 'Memory', 'Network', 'DHCP Leases' ]:
         self.driver.find_element_by_xpath("//fieldset/legend[contains(text(),'" + i + "')]")
         print(' * overview page contains section ' + i)
Example #21
0
def rule_value(context, value):
    value_input = context.browser.find_element_by_xpath("//paper-input[@id='metricValue']")
    actions = ActionChains(context.browser)
    actions.move_to_element(value_input)
    actions.click()
    actions.send_keys(Keys.BACK_SPACE)
    actions.perform()

    actions.move_to_element(value_input)
    actions.click()
    actions.send_keys("0")
    actions.perform()
    def test_drag_drop(self):
        print "Reorder site test is commencing."
        wait = WebDriverWait(self.driver, self.waitTime)
        self.driver.get(self.url)

        print "Starting logging in."
        wait.until(EC.element_to_be_clickable((By.ID, 'login-button'))).click()
        wait.until(
            EC.element_to_be_clickable((By.ID, 'weebly-username'))).click()
        wait.until(
            EC.element_to_be_clickable((By.ID, 'weebly-password'))).click()
        Username = self.driver.find_element_by_id('weebly-username')
        Username.send_keys(self.email)
        Password = self.driver.find_element_by_id('weebly-password')
        Password.send_keys(self.password)
        wait.until(EC.element_to_be_clickable(
            (By.XPATH, "//form[@id='weebly-login']/p[4]/input"))).click()

        print "Selecting Store to edit."
        wait.until(EC.presence_of_element_located((By.LINK_TEXT, "Jon's Site")))
        self.driver.find_element_by_link_text("Jon's Site").click()

        print "Make sure drag and drop elements exist before starting drag and drop."
        try:
            self.assertTrue(self.is_element_present(By.XPATH, "//li[2]/div[2]/div/div"))
        except AssertionError as e:
            self.verificationErrors.append(str(e))
        try:
            self.assertTrue(self.is_element_present(By.XPATH, "//div[2]/div/h2"))
        except AssertionError as e:
            self.verificationErrors.append(str(e))

        print "Elements exist. Get first item on lists location."
        hover_element1 = self.driver.find_element_by_xpath("//div[2]/div/h2")
        hover_action1 = ActionChains(self.driver)
        hover_action1.move_to_element(hover_element1).perform()
        time.sleep(4)

        print "Deleting the first item on the list."
        wait.until(EC.element_to_be_clickable((By.XPATH, "//div[3]/div/div/ul/li/div/div[3]/div"))).click()
        wait.until(EC.element_to_be_clickable((By.XPATH, "//div[3]/div[3]/div/div/span"))).click()

        print "Exit the editor."
        wait.until(EC.element_to_be_clickable(
            (By.XPATH, "//li[@id='more-drop-button']/a/span"))).click()
        wait.until(EC.element_to_be_clickable(
            (By.LINK_TEXT, "Exit Editor"))).click()
        print "Exited the editor"

        print "Log out"
        wait.until(EC.element_to_be_clickable((By.LINK_TEXT, "Logout"))
                   ).click()
        print "Logged out!"
Example #23
0
def clicketi_click(context, button):
    """
    trying two different ways of clicking a button because sometimes the
    Chrome driver for no apparent reason misinterprets the offset and
    size of the button
    """
    try:
        button.click()
    except WebDriverException:
        action_chain = ActionChains(context.browser)
        action_chain.move_to_element(button)
        action_chain.click()
        action_chain.perform()
Example #24
0
 def drag_element_to(self, element, drag_to, center):
     '''Drag one element over to another element'''
     chain = ActionChains(self.browser)
     chain.move_to_element(element)
     chain.click_and_hold(element)
     if center:
         # move to center of element
         chain.move_to_element(drag_to)
     else:
         # move to offset from top left of element
         chain.move_to_element_with_offset(drag_to, 2, 2)
     chain.perform()
     return chain
def action_elements_events(self, element_menu, drag_divs):
    action = ActionChains(self.driver)
    action.move_to_element(element_menu).click(element_menu)
    action.click_and_hold(drag_divs)
    action.move_by_offset(35, 35)
    action.move_by_offset(15, 20)
    action.move_by_offset(55, 15)
    action.release()
    action.perform()
    event_start = self.driver.find_element_by_xpath("//li[@id = 'event-start']/span[2]").text
    event_drag = self.driver.find_element_by_xpath("//li[@id='event-drag']/span[2]").text
    event_stop = self.driver.find_element_by_xpath("//li[@id = 'event-stop']/span[2]").text
    return event_start, event_drag, event_stop
Example #26
0
  def _nx4_terminate_session(self, session):
    """
    _nx4_terminat_session() takes a sesion object as an element an
    termimnates it. This can only be done after _nx4_login() and
    _nx4_existing_session()
    """

    driver = self.driver

    session.click()
    actions = ActionChains(driver)
    actions.move_to_element(session).context_click().perform()
    driver.find_element_by_link_text('Terminate session').click()
    def answer_problem(self, correctness):
        """
        Answer image problem.
        """
        offset = 25 if correctness == 'correct' else -25
        input_selector = ".imageinput [id^='imageinput_'] img"
        input_element = self.problem_page.q(css=input_selector)[0]

        chain = ActionChains(self.browser)
        chain.move_to_element(input_element)
        chain.move_by_offset(offset, offset)
        chain.click()
        chain.perform()
Example #28
0
def get_html(url, page):
    driver = webdriver.Chrome('D:/Program Files (x86)/chromedriver_win32/chromedriver.exe')
    driver.set_window_size(1920, 1080)

    # 关键词:性感男人 by URL编码
    driver.get(url)

    time.sleep(5)
    # 通过Xpath找到More button
    load_more = driver.find_element_by_xpath('//*[@id="pageMore"]')#baidupic
    print('gggggggg')
    a = 0
    stop = False;
    while(True):
        scroll_num = 0
        while (load_more.get_attribute('style')!="visibility: visible;"):
            driver.execute_script("scrollTo(0,document.body.scrollHeight);")
            sleep_time = 5
            time.sleep(sleep_time)
            scroll_num += 1
            if scroll_num > 10:
                stop = True
                break
        # print('start')
        # 模拟用户行为点击加载更多按键
        if stop:
            break
        actions = ActionChains(driver)
        actions.move_to_element(load_more)
        actions.click(load_more)
        actions.perform()

        driver.execute_script("scrollTo(0,document.body.scrollHeight);")
        sleep_time = 5
        print(sleep_time)
        time.sleep(sleep_time)
        print(load_more.get_attribute('style'))
        a += 1
        print(a)

    html = driver.execute_script("return document.getElementsByTagName('body')[0].innerHTML")
    driver.close()
    html = html.encode('UTF-8')
    print(html)
    # 将爬到的html写入文件
    mkdir(os.path.dirname(OUTPUT_HTML))
    with open(OUTPUT_HTML, 'w') as fw:
        fw.write(html)
        fw.close
    print("end")
    return html
Example #29
0
 def connect(self, src, dst):
     """ Return :class:`ConnectionsPage` for connecting `src` to `dst`. """
     chain = ActionChains(self.browser)
     chain.click_and_hold(src.output_port)
     # Using root rather than input_port since for some reason
     # even using a negative Y offset can select the parent's input.
     chain.move_to_element(dst.input_port)
     chain.release(None)
     chain.perform()
     parent, dot, srcname = src.pathname.rpartition(".")
     parent, dot, dstname = dst.pathname.rpartition(".")
     editor_id = "ConnectionsFrame-%s" % (parent)
     editor_id = editor_id.replace(".", "-")
     return ConnectionsPage(self.browser, self.port, (By.ID, editor_id))
Example #30
0
 def addUser(name,passwd,confirmpasswd,email,telephone):
     action_chains = ActionChains(driver)
     action_chains.move_to_element(driver.find_element_by_link_text("用户管理")).perform()
     action_chains.click(driver.find_element_by_link_text("注册用户")).perform()
     driver.find_element_by_id("username").send_keys(name)
     driver.find_element_by_id("password").send_keys(passwd)
     driver.find_element_by_id("confirmpassword").send_keys(confirmpasswd)
     driver.find_element_by_id("email").send_keys(email)
     driver.find_element_by_id("telephone").send_keys(telephone)
     driver.find_element_by_name("strPrivilegeName()").click()
     driver.find_element_by_id("RegisterBut").click()
     alert = self.driver.switch_to_alert()
     alert.accept()
     time.sleep(3)
Example #31
0
# driver.find_element_by_xpath("//*[text()='Export']").click()
# time.sleep(1)
# os.rename('Download/grafana_data_export.csv','Ready/mysql/MySQL Connections.csv')

# # MySQL Client Thread Activity csv download
# actions=ActionChains(driver)
# driver.find_element_by_xpath("//*[text()='MySQL Client Thread Activity']").click()
# more=driver.find_element_by_xpath("//*[@id='panel-10']/div/div/div/plugin-component/panel-plugin-graph/grafana-panel/div/div[1]/panel-header/span/span[3]/ul/li[5]/a/span")
# export_csv=driver.find_element_by_xpath("//*[@id='panel-10']/div/div/div/plugin-component/panel-plugin-graph/grafana-panel/div/div[1]/panel-header/span/span[3]/ul/li[5]/ul/li[4]/a/span")
# actions.move_to_element(more).move_to_element(export_csv).click().perform()
# driver.find_element_by_xpath("//*[text()='Export']").click()
# time.sleep(1)
# os.rename('Download/grafana_data_export.csv','Ready/mysql/MySQL Client Thread Activity.csv')

# MySQL Questions csv download
actions = ActionChains(driver)
driver.find_element_by_xpath("//*[text()='MySQL Questions']").click()
more = driver.find_element_by_xpath(
    "//*[@id='panel-53']/div/div/div/plugin-component/panel-plugin-graph/grafana-panel/div/div[1]/panel-header/span/span[3]/ul/li[5]/a/span"
)
export_csv = driver.find_element_by_xpath(
    "//*[@id='panel-53']/div/div/div/plugin-component/panel-plugin-graph/grafana-panel/div/div[1]/panel-header/span/span[3]/ul/li[5]/ul/li[4]/a/span"
)
actions.move_to_element(more).move_to_element(export_csv).click().perform()
driver.find_element_by_xpath("//*[text()='Export']").click()
time.sleep(1)
os.rename('Download/grafana_data_export.csv',
          'Ready/mysql/MySQL Questions.csv')

# driver.quit()
Example #32
0
    def runTest(self):
        driver = self.getDriver()
        driver.implicitly_wait(30)
        param = self.param
        tool = utils
        driver.refresh()
        # driver.find_element_by_xpath('//*[@id="_dropdown_popcontainer"]/div/i').click()
        # driver.find_element_by_xpath('//*[@id="home_header"]//div[text()="UI测试专属"]').click()
        # driver.find_element_by_xpath('//button[@class="u-button btn__style___37bsb u8c_primary__style___RFibc  btn__style___20DQM "]').click()
        # sleep(2)
        # 左上方公共节点
        driver.find_element_by_class_name('lebra-navbar-left-icon').click()
        sleep(2)
        # 进入社交协同
        driver.find_element_by_xpath('//*[text()="人力资源"]').click()
        sleep(2)
        # 进入一级节点
        menu2 = driver.find_element_by_css_selector('span[title="劳动合同"]')
        actions = ActionChains(driver)
        actions.move_to_element(menu2)
        actions.click(menu2)
        actions.perform()
        sleep(2)
        # 进入二级节点
        driver.find_element_by_xpath('//li[@title="劳动合同解除"]').click()

        sleep(2)
        # 跳转劳动合同签订iframe
        iframe = driver.find_element_by_id('HRGXFW020040')
        # # driver.switch_to.frame(iframe)
        SwitchTo(driver).frame(iframe)
        sleep(2)

        # 点击新增按钮
        driver.find_element_by_xpath(
            '//*[@id="flowApprove"]//button[@class="btn btn-primary"]').click(
            )
        sleep(2)

        # 点击左侧书按钮
        driver.find_element_by_xpath(
            '//span[@class="button level0 switch noline_close"]').click()

        # 点击二级的左侧树按钮
        driver.find_element_by_xpath(
            '//span[text()="仓储中心-北京"]/ancestor::a/preceding-sibling::span'
        ).click()

        # 选择组织信息
        driver.find_element_by_xpath(
            '//span[text()="仓储中心-北京"]/ancestor::a/following-sibling::ul//span[text()="仓储中心-北京"]'
        ).click()
        sleep(1)
        # 搜索框输入信息

        driver.find_element_by_xpath('//*[@id="searchVal"]').send_keys(
            context.Name.random_name)
        # driver.find_element_by_xpath('//*[@id="searchVal"]').send_keys("戴英")

        # 点击搜索按钮
        driver.find_element_by_xpath('//*[@id="searchBtn"]/span/i[2]').click()

        # 点击选中第一个
        driver.find_element_by_xpath(
            '//*[@id="staffAllBody"]/div[2]/table/tbody/tr/td[1]/div/div/label'
        ).click()

        # 点击确定按钮
        driver.find_element_by_xpath(
            '//*[@id="addSignsDialog"]//button[@class="btn btn-primary"]'
        ).click()

        sleep(3)

        # 输入解除原因
        # driver.find_element_by_xpath('//*[@id="edit_201901111404244vjRbIDmR8"]/div/span').click()
        # driver.find_element_by_xpath('')

        # 输入经济补偿金
        driver.find_element_by_xpath(
            '//div[@id="eidt_20190111140430sFoT9PAE1X"]//input[@class="u-form-control ui-form-control fl text-right ui-text-left"]'
        ).send_keys(10000)

        # 输入补偿金
        driver.find_element_by_xpath(
            '//div[@id="eidt_20190111140431914mpEyXCu"]//input[@class="u-form-control ui-form-control fl text-right ui-text-left"]'
        ).send_keys(10000)

        # 点击解除日期按钮

        driver.find_element_by_xpath(
            '//*[@id="edit_20190111140414sRBCMJuXDC"]/div/span[1]').click()
        driver.find_element_by_xpath(
            '//*[@id="edit_20190111140414sRBCMJuXDC"]//div[@class="u-date-panel is-visible"]//div[@class="u-date-cell current"]'
        ).click()

        # 点击保存按钮
        driver.find_element_by_xpath(
            '//span[text()="保存"]/ancestor::button').click()
        sleep(3)
        text = driver.find_element_by_xpath(
            '//*[@id="templatePanel"]//button/span[text()="编辑"]').text
        self.assertEqual("编辑", text)

        # 点击提交按钮
        driver.find_element_by_xpath(
            '//span[text()="提交"]/ancestor::button').click()
        sleep(2)
        # 关闭当前页面
        driver.switch_to.default_content()
        sleep(1)
        driver.find_element_by_xpath(
            '//*[@id="home_header"]/div/div[3]/ul/li/div').click()
Example #33
0
from selenium import webdriver
from selenium.webdriver import ActionChains
import time

driver = webdriver.Chrome(executable_path='chromedriver.exe')
driver.get('https://opensource-demo.orangehrmlive.com/')
driver.maximize_window()

#login using user details
driver.find_element_by_id('txtUsername').send_keys('Admin')
driver.find_element_by_id('txtPassword').send_keys('admin123')
driver.find_element_by_id('btnLogin').click()
time.sleep(5)

#find all three option on mouse hover
admin = driver.find_element_by_id('menu_admin_viewAdminModule')
usermgmt = driver.find_element_by_id('menu_admin_UserManagement')
user = driver.find_element_by_id('menu_admin_viewSystemUsers')

#Create a action chanin object by passing driver object
action = ActionChains(driver)

#It first move to first option on mouse hover then second then user then click on user
action.move_to_element(admin).move_to_element(usermgmt).move_to_element(
    user).click().perform()
Example #34
0
    def create_new_classroom(self,
                             course_name,
                             prof_name,
                             prof_email,
                             student_data=None):
        # Go to "All Events"
        self.driver.get("http://seminar.minerva.kgi.edu/app/all-events")

        print('Going to \"All Events\"')
        WebDriverWait(self.driver, 10).until(EC.title_contains("All Events"))

        # Click button to create new classroom
        print(f"Creating new classroom for {course_name}")
        self.driver.find_element_by_xpath(
            "//button[text()='Create Classroom']").click()

        # Check that the new class page has loaded
        WebDriverWait(self.driver, 30).until(
            EC.presence_of_element_located(
                (By.XPATH, "//h2[text()='Class Information']")))

        # Session name
        session_name = f"{course_name} Technical Interview - {student_data.name}"
        class_name_field = self.driver.find_element_by_xpath(
            "//input[@class='value-box']")
        self.driver.execute_script("arguments[0].value = ''", class_name_field)
        class_name_field.send_keys(session_name)
        class_name_field.send_keys(Keys.RETURN)
        print(f"Entered session name: {session_name}")
        self.class_edit_updated()

        # Class date
        date_picker_field = self.driver.find_element_by_xpath(
            "//input[contains(@class, 'hasDatepicker')]")
        self.driver.execute_script("arguments[0].value = ''",
                                   date_picker_field)
        date_picker_field.send_keys(student_data.day)
        date_picker_field.send_keys(Keys.RETURN)
        print(f'Picking date {student_data.day}')
        self.class_edit_updated()

        # Class hour picker
        parent_locator_time_hour = "//select[@class='date' and @name='hour']"
        self.driver.find_element_by_xpath(
            f"{parent_locator_time_hour}").click()
        hour_value = student_data.time.hour if 0 < student_data.time.hour < 13 else student_data.time.hour - 12
        hour_choice = self.driver.find_element_by_xpath(
            f"{parent_locator_time_hour}/option[@value='{hour_value}']")
        hour_choice.click()
        time.sleep(2)
        WebDriverWait(self.driver, 10).until(
            EC.element_selection_state_to_be(hour_choice, True))

        # Class minute picker
        parent_locator_time_minute = "//select[@class='date' and @name='minute']"
        self.driver.find_element_by_xpath(
            f"{parent_locator_time_minute}").click()
        minute_choice = self.driver.find_element_by_xpath(
            f"{parent_locator_time_minute}/option[@value='{student_data.time.minute}']"
        )
        minute_choice.click()
        time.sleep(2)
        WebDriverWait(self.driver, 10).until(
            EC.element_selection_state_to_be(minute_choice, True))

        # Class AM/PM picker
        parent_locator_time_am_pm = "//select[@class='date' and @name='am-pm']"
        self.driver.find_element_by_xpath(
            f"{parent_locator_time_am_pm}").click()
        am_pm_value = "am" if 0 < student_data.time.hour < 12 else "pm"
        am_pm_choice = self.driver.find_element_by_xpath(
            f"{parent_locator_time_am_pm}/option[@value='{am_pm_value}']")
        am_pm_choice.click()
        time.sleep(2)
        WebDriverWait(self.driver, 10).until(
            EC.element_selection_state_to_be(am_pm_choice, True))
        print(f"Class time: {student_data.time}")

        # Click professor field
        time.sleep(3)
        print('Picking professor')
        professor_disp_field = self.driver.find_element_by_css_selector(
            "span.select2-selection__arrow")
        actions = ActionChains(self.driver)
        actions.move_to_element(professor_disp_field).click().perform()

        # Search for professor and select the right one
        parent_locator_professor = "//div[@class='form-wrapper teacher-wrapper']"
        professor_search_field = WebDriverWait(self.driver, 5).until(
            EC.presence_of_element_located((
                By.XPATH,
                f"{parent_locator_professor}//input[@class='select2-search__field']"
            ))).send_keys(prof_name)

        professor_option = WebDriverWait(self.driver, 5).until(
            EC.presence_of_element_located((
                By.XPATH,
                f"{parent_locator_professor}//li[contains(text(), '{prof_email}')]"
            ))).click()
        print(f"Selected Prof: {prof_name}, {prof_email}")

        # Student picker
        print('Picking student')
        parent_locator_student = "//div[@class='form-wrapper students-wrapper']"
        student_search_field = WebDriverWait(self.driver, 5).until(
            EC.element_to_be_clickable(
                (By.XPATH, f"{parent_locator_student}//input")))
        student_search_field.click()
        student_search_field.send_keys(student_data.name)
        WebDriverWait(self.driver, 5).until(
            EC.presence_of_element_located((
                By.XPATH,
                f"{parent_locator_student}//li[contains(@class, 'select2-results__option') and contains(text(), '{student_data.email}')]"
            ))).click()
        print(f"Selected {student_data.name}")

        # Enable recording
        print('Check recording')
        self.driver.find_element_by_xpath(
            "//div[@class='form-wrapper is-record-wrapper']//input").click()

        # Click button to publish class
        WebDriverWait(self.driver, 10).until(
            EC.element_to_be_clickable(
                (By.CSS_SELECTOR, "button.publish-class"))).click()
        print('Published class')
        time.sleep(2)

        return self.driver.current_url
Example #35
0
from selenium.webdriver import ActionChains
import time

browser = webdriver.Chrome(
    executable_path=
    "C:\\Users\\Manish\\Downloads\\Pendrive Data\\Python Files\\drivers\\chromedriver.exe"
)
browser.maximize_window()
browser.get("https://opensource-demo.orangehrmlive.com")

browser.find_element("id", "txtUsername").send_keys("Admin")
browser.find_element("id", "txtPassword").send_keys("admin123")
browser.find_element(
    "xpath",
    "/html/body/div[1]/div/div[3]/div[2]/div[2]/form/div[5]/input").click()
time.sleep(2)

firstLevel = browser.find_element("xpath",
                                  "/html/body/div[1]/div[2]/ul/li[1]/a")
secondLevel = browser.find_element(
    "xpath", "/html/body/div[1]/div[2]/ul/li[1]/ul/li[1]/a")
thirdLevel = browser.find_element(
    "xpath", "/html/body/div[1]/div[2]/ul/li[1]/ul/li[1]/ul/li/a")

actions = ActionChains(browser)
actions.move_to_element(firstLevel).move_to_element(
    secondLevel).move_to_element(thirdLevel).click().perform()

time.sleep(10)
browser.quit()
Example #36
0
        def mouseover(i):

            action = ActionChains(self.driver)
            action.move_to_element(lists[i]).perform()
            time.sleep(3)
            del action
    def test_dragon_drop(self, driver, default_project, session, provider, modifier_key, action):
        current_browser = driver.desired_capabilities.get('browserName')
        node_id = default_project.id

        # Connect addon to node, upload a single test file
        node = osf_api.get_node(session, node_id=node_id)
        if provider != 'osfstorage':
            addon = osf_api.get_user_addon(session, provider)
            addon_account_id = list(addon['data']['links']['accounts'])[0]
            osf_api.connect_provider_root_to_node(session, provider, addon_account_id, node_id=node_id)
        if modifier_key == 'alt':
            file_name = 'copy_' + find_current_browser(driver) + '_' + provider + '.txt'
            new_file, metadata = osf_api.upload_fake_file(session=session, node=node, name=file_name, provider=provider)
        else:
            file_name = 'move_' + current_browser + '_' + provider + '.txt'
            new_file, metadata = osf_api.upload_fake_file(session=session, node=node, name=file_name, provider=provider)

        try:
            files_page = FilesPage(driver, guid=node_id)
            files_page.goto()

            # Find the row that contains the new file
            source_row = find_row_by_name(driver, provider, new_file)

            # Find the row with the OSF storage
            for row in files_page.fangorn_addons:
                if row.text == 'OSF Storage (United States)':
                    target = row
                    break

            action_chains = ActionChains(driver)
            action_chains.reset_actions()
            if 'chrome' in current_browser:
                # The sleeps in the following code block are needed for
                # Chrome's virtual keyboard to work properly
                if modifier_key == 'alt':
                    action_chains.key_up(Keys.LEFT_ALT).perform()
                    action_chains.key_down(Keys.LEFT_ALT).perform()
                    action_chains.click_and_hold(source_row).perform()
                    time.sleep(1)

                    action_chains.reset_actions()
                    action_chains.move_to_element(target).perform()
                    time.sleep(1)

                    action_chains.reset_actions()
                    action_chains.key_up(Keys.LEFT_ALT).perform()
                    action_chains.key_down(Keys.LEFT_ALT).perform()
                    action_chains.key_up(Keys.ALT).perform()
                    action_chains.key_down(Keys.ALT).perform()
                    action_chains.release(target).perform()
                    time.sleep(1)

                    action_chains.reset_actions()
                    action_chains.key_up(Keys.LEFT_ALT).perform()
                    action_chains.key_up(Keys.ALT).perform()

                else:
                    action_chains.click_and_hold(source_row).perform()
                    # Chrome -> will highlight multiple rows if you do not sleep here
                    time.sleep(1)
                    action_chains.move_to_element(target).perform()

                    action_chains.reset_actions()
                    action_chains.release(target).perform()
            else:
                if modifier_key == 'alt':
                    action_chains.key_down(Keys.LEFT_ALT)
                    action_chains.click_and_hold(source_row)
                    action_chains.move_to_element(target)
                    action_chains.release(target)
                    action_chains.key_up(Keys.LEFT_ALT)
                    action_chains.perform()
                else:
                    action_chains.drag_and_drop(source_row, target).perform()

            # Wait for 5 seconds for Copying message to show
            WebDriverWait(driver, 5).until(EC.visibility_of_element_located((By.CLASS_NAME, 'text-muted')))
            # Wait a maximum of 20 seconds for Copying message to resolve
            WebDriverWait(driver, 20).until(EC.invisibility_of_element_located((By.CLASS_NAME, 'text-muted')))

            files_page.goto()
            origin_file = find_row_by_name(driver, provider, new_file)
            destination_file = find_row_by_name(driver, 'osf', new_file)

            if modifier_key == 'alt':
                # Test for copy
                assert 'copy' in origin_file.text
                assert 'copy' in destination_file.text

                osf_api.delete_file(session, metadata['data']['links']['delete'])

            else:
                # Test for move
                assert origin_file is None
                assert 'move' in destination_file.text

        finally:
            osf_api.delete_addon_files(session, provider, current_browser, guid=node_id)
Example #38
0
    def runTest(self):
        driver = self.getDriver()
        param = self.param
        tool = utils
        driver.refresh()
        # 左上方公共节点
        driver.find_element_by_class_name('lebra-navbar-left-icon').click()
        sleep(1)
        # 进入财务管理
        driver.find_element_by_xpath('//*[text()="人力资源"]').click()
        sleep(1)
        # 进入一级节点
        menu2 = driver.find_element_by_css_selector('span[title="人力设置"]')
        actions = ActionChains(driver)
        actions.move_to_element(menu2)
        actions.click(menu2)
        actions.perform()
        sleep(1)
        # 进入二级节点
        menu3 = driver.find_element_by_css_selector(
            'li[class="bottomBar"][title="变动类型"]')
        actions.move_to_element(menu3)
        actions.click(menu3)
        actions.perform()

        sleep(1)
        titleName = driver.find_element_by_css_selector(
            '#home_header > div > div.tab--38iB- > ul > li > p').get_attribute(
                'title')
        assert u"变动类型" in titleName, u"页面源码中不存在该关键字!"
        sleep(1)
        iframe = driver.find_element_by_id('HRSZ030020')
        driver.switch_to.frame(iframe)

        # 新增
        driver.find_element_by_xpath(
            '//p[text()="入职"]/..//*[text()="新增"]').click()

        # 点击新增
        driver.find_element_by_xpath(
            '//p[text()="入职"]/parent::div/div//span[text()="新增"]/following-sibling::i'
        ).click()

        # 输入编码
        num = random.randint(999, 10000)
        code = "BM{}".format(num)
        driver.find_element_by_xpath(
            '//p[text()="入职"]/parent::div/div//span[text()="新增"]/parent::div/following-sibling::div//label[text()="编码"]/following-sibling::div//input'
        ).send_keys(code)

        # 点击离职
        # 输入名称
        num1 = random.randint(999, 10000)
        name = "BM{}".format(num1)
        driver.find_element_by_xpath(
            '//p[text()="入职"]/parent::div/div//span[text()="新增"]/parent::div/following-sibling::div//label[text()="名称"]/following-sibling::div//input'
        ).send_keys(name)

        # 点击保存按钮
        driver.find_element_by_xpath(
            '//p[text()="入职"]/parent::div/div//button[2]').click()
        sleep(2)
        # 断言
        self.assertIn(name, driver.page_source)

        driver.switch_to.default_content()
        driver.find_element_by_class_name('u-button').click()
        sleep(1)
        driver.find_element_by_class_name('u-dropdown-menu-item').click()
    def get_company(self, company_name):
        nowhandles = self.driver.current_window_handle
        time.sleep(1)
        try:
            self.driver.find_element_by_xpath(
                '/html/body/div[1]/div/div/div[1]/div[2]/div[2]/div/div[1]/div[2]/div/h3/a').click()
        except:
            self.driver.find_element_by_xpath('/html/body/div[1]/div/div/div[1]/div[2]/div[2]/div/div/div/div/div[3]')
            self.process_browser_window.emit(company_name + '没有查找到该企业信息,请确认该名称是否存在!')
            self.s += 1
            self.success_browser_num.emit(self.s)
            self.failname_browser_window.emit(company_name)
            self.n += 1
            self.end_browser_num.emit(self.n)
            return

        time.sleep(1)
        self.process_browser_window.emit("已进入%s该企业详情页面,请稍后。。。" % company_name)
        allhandles = self.driver.window_handles
        for handles in allhandles:
            if handles != nowhandles:
                self.driver.switch_to.window(handles)
        time.sleep(1)
        js = "window.scrollTo(0,600)"
        self.driver.execute_script(js)
        time.sleep(0.5)

        # 工商信息表
        company_data_1 = ''
        try:
            business_content = self.driver.find_elements_by_xpath('/html/body/div[1]/div/div/div[5]/div[1]/div[3]/table/tbody/tr')
            # 工商信息采集
            for cont_1 in business_content:
                company_title_1 = cont_1.find_element_by_xpath('.//td[1]')
                try:
                    company_info_1 = cont_1.find_element_by_xpath('.//td[2]')
                except:
                    company_info_1 = cont_1.find_element_by_xpath('.//td[2]/div[2]/a[1]')
                try:
                    company_title_2 = cont_1.find_element_by_xpath('.//td[3]')
                except:
                    pass
                try:
                    company_info_2 = cont_1.find_element_by_xpath('.//td[4]')
                except:
                    pass
                company_data_1 += company_title_1.text + ':' + company_info_1.text + ';' + company_title_2.text + \
                                  ':' + company_info_2.text + '\n'

            self.process_browser_window.emit(company_name + '--工商信息爬取成功!')
            company_content_1 = company_data_1
        except:
            self.process_browser_window.emit(company_name + '没有查找到该企业工商信息,请确认该名称是否存在!')
            self.f += 1
            self.fail_browser_num.emit(self.f)
            self.failname_browser_window.emit(company_name)
            self.n += 1
            self.end_browser_num.emit(self.n)
            return

        # 股东信息表
        Action = ActionChains(self.driver)
        element = self.driver.find_element_by_xpath('/html/body/div[1]/div/div/div[4]/div/div/div[1]/a')
        Action.move_to_element(element).perform()
        time.sleep(1)
        company_data_2 = ''
        try:

            self.driver.find_element_by_xpath(
                    '/html/body/div[1]/div/div/div[4]/div/div/div[1]/div/a[3]').click()

            time.sleep(1)
            shareholder_content = self.driver.find_elements_by_xpath(
                '/html/body/div[1]/div/div/div[5]/div[1]/div[4]/table/tbody/tr')
            # 股东信息采集
            for cont_2 in shareholder_content:
                shareholder_info_1 = cont_2.find_element_by_xpath('.//td[2]/div/div[2]/a[1]')
                shareholder_info_2 = cont_2.find_element_by_xpath('.//td[3]/div/span')
                shareholder_info_3 = cont_2.find_element_by_xpath('.//td[4]/div/span')
                shareholder_info_4 = cont_2.find_element_by_xpath('.//td[5]/div/span')
                company_data_2 += shareholder_info_1.text + ';' + shareholder_info_2.text + ';' + shareholder_info_3.text + '\n'
            self.process_browser_window.emit(company_name + '--股东信息爬取成功!')
            company_content_2 = '--股东信息:' + '\n' + '股东-' + '-持股占比-' + '-认缴出资额' + '实际出资额' + '\n' + company_data_2
        except:
            company_content_2 = '--股东信息:' + '\n' + '股东-' + '-持股占比-' + '-认缴出资额' + '实际出资额' + '\n' + company_data_2
            self.process_browser_window.emit(company_name + '--股东信息爬取失败,或该公司未有股东信息!')

        # 公司主要人员信息表
        Action.move_to_element(element).perform()
        time.sleep(1)
        company_data_3 = ''
        try:
            self.driver.find_element_by_xpath(
                '/html/body/div[1]/div/div/div[4]/div/div/div[1]/div/a[5]').click()
            time.sleep(1)
            manager_content = self.driver.find_elements_by_xpath(
                '/html/body/div[1]/div/div/div[5]/div[1]/div[6]/table/tbody/tr')
            # 公司主要人员信息采集
            for cont_3 in manager_content:
                manager_info_1 = cont_3.find_element_by_xpath('.//td[2]/div/div[2]/a[1]')
                manager_info_2 = cont_3.find_element_by_xpath('.//td[3]/div/span')
                company_data_3 += manager_info_1.text + ';' + manager_info_2.text + '\n'
            self.process_browser_window.emit(company_name + '--主要人员爬取成功')
            company_content_3 = '--主要人员信息:' + '\n' + '姓名-' + '-职位' + '\n' + company_data_3
        except:
            company_content_3 = '--主要人员信息:' + '\n' + '姓名-' + '-职位' + '\n' + company_data_3

            self.process_browser_window.emit(company_name + '--主要人员爬取失败,或该公司未有主要人员信息。。。')

        company_content = '----' + company_name + '\n' + company_content_1 + company_content_2 + company_content_3 + '\n'

        if not os.path.exists(self.generate_data + self.generate_name):
            open(self.generate_data + self.generate_name, 'a', encoding='utf-8')
        with open(self.generate_data + self.generate_name, 'a', encoding='utf-8') as cp_file:
            cp_file.write(company_content)
            self.process_browser_window.emit(company_name + "--信息保存成功!")
        self.s += 1
        self.success_browser_num.emit(self.s)

        self.n += 1
        self.end_browser_num.emit(self.n)
        self.driver.close()
        self.driver.switch_to.window(nowhandles)
Example #40
0
from Data import TestData1 as td
import EnvConfig as env
from ObjectRepo import Locators as loc

driver = webdriver.Chrome(env.DriverPATH)
driver.maximize_window()
driver.implicitly_wait(10)
driver.get("https://www.toolsqa.com/selenium-webdriver/mouse-hover-action/")

time.sleep(2)

mouseHOver_Tut_link = driver.find_element_by_xpath(
    loc.MOuseHover_Tutorials_Link)
ac = ActionChains(driver)

ac.move_to_element(mouseHOver_Tut_link)
ac.perform()
about = driver.find_element_by_xpath(loc.About)
ac.move_to_element(about).perform()

face_book = driver.find_element_by_xpath(loc.facebook)
face_book.click()

# bodyOFToolsQA_com = driver.find_element_by_xpath("//body[contains(@class,'post-template')]")
# bodyOFToolsQA_com.send_keys(keyboard.PAGE_DOWN)
# bodyOFToolsQA_com.send_keys(keyboard.PAGE_DOWN)
#
# keyboard_AC =  ActionChains(driver)
# keyboard_AC.key_down(keyboard.CONTROL).send_keys('a').key_up(keyboard.CONTROL).perform()
# # keyboard_AC.
 def mouse_hover_desktops_menu(self):
     actions = ActionChains(self._driver)
     return actions.move_to_element(
         self._driver.find_element_by_xpath(self._desktops_menu)).perform()
Example #42
0
# #第一步:鼠标悬停
# ac.move_to_element()
# #第二步:点击动作
# ac.click()
# #第三步:右击
# ac.context_click()
# #以perform结束
# ac.perform()
# #或者以整体去运行
# ac = ActionChains(driver)
# ac.move_to_element().click().context_click().perform()

#举例子:百度首页,悬停到设置
ac = ActionChains(driver)
ele = wait_find_element((By.XPATH, "//a[text()='设置']"))
ac.move_to_element(ele).perform()
ac.click(wait_find_element((By.XPATH, "//a[text()='高级搜索' ]"))).perform()
'''
链式调用  actionChains
1、每次都是return self
2、perform()  run()
作用:用在连续调用,一次运行不同的程序或者函数
:数据库,ORM模型==》链式调用

函数:
1、click()
2、double-click()
3、context_click()
4、click_and_hold()
5、drag_and_drop()
move_to_element
Example #43
0
from selenium import webdriver
from selenium.webdriver import ActionChains

driver = webdriver.Chrome(
    executable_path="C:\Program Files\Python39\chromedriver")
driver.implicitly_wait(20)
driver.maximize_window()
driver.get('https://mail.ru/')

driver.find_element_by_name('login').send_keys('*****@*****.**')
driver.find_element_by_xpath('//*[@id="mailbox"]/form[1]/button[1]').click()

driver.find_element_by_name('password').send_keys('youth')
driver.find_element_by_xpath('//*[@id="mailbox"]/form[1]/button[2]').click()

vse_proekti = driver.find_element_by_link_text('Все проекты')
moy_mir = driver.find_element_by_link_text('Мой Мир')

actions = ActionChains(driver)
actions.move_to_element(vse_proekti).move_to_element(moy_mir).click().perform()
Example #44
0
def scrape_directory():

    from selenium import webdriver
    from bs4 import BeautifulSoup
    import pandas as pd
    from csv import writer
    import time
    from selenium import webdriver
    from selenium.webdriver.chrome.options import Options
    from selenium.webdriver import ActionChains
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC

    url = 'https://www.softwaresuggest.com/all-categories'
    all_the_apps = []

    driver = webdriver.Chrome('/Users/muhammadaqib/Downloads/chromedriver')
    driver.get(url)

    soup = BeautifulSoup(driver.page_source, 'lxml')

    all_categories = soup.find('div', 'mdl-grid compare_row').find_all('a')

    category_list = []
    for category in all_categories:
        category_list.append([category.text.strip(), category['href']])

    for item in category_list:
        driver.get(item[1])
        print('url***', item[1])
        soup = BeautifulSoup(driver.page_source, 'lxml')
        try:
            check_pager = soup.find('ul', {'id': 'mypager_id'})
        except:
            check_pager = None
        try:
            check_more_button = soup.find(
                'button',
                {'class': 'ga_track_vmp_lmb cat_view_more_btn ripple_btn'})
        except:
            check_more_button = None

        if check_pager:
            last_page = check_pager.find_all('li')[-1].find('a')['href'].split(
                '?')[-1].split('=')[-1]
            for pg_no in range(1, int(last_page) + 1):
                print(item[1] + '?page=' + str(pg_no))
                driver.get(item[1] + '?page=' + str(pg_no))
                soup = BeautifulSoup(driver.page_source, 'lxml')

                apps_on_page = soup.find('div', 'cat_list_append').find_all(
                    'h3', 'slist_oftware_name')
                for app_item in apps_on_page:
                    try:
                        driver.get(app_item.find('a')['href'])
                    except:
                        app_url = app_item.find(
                            'span',
                            'd-flex align-items-center ga_track_soft_name new_link_onclick'
                        )['onclick'].split('(')[1][1:-11]
                        driver.get(app_url)
                    soup = BeautifulSoup(driver.page_source, 'lxml')

                    print(app_item.text.strip())
                    title = app_item.text.strip()
                    category = item[0]
                    try:
                        find_app_url = soup.find(
                            'span',
                            'ga_track_vwl_comp_d comp_detail_vwb_btn cursor_pointer'
                        )['onclick']
                        driver.get(find_app_url.split('(')[1][1:-11])
                        time.sleep(5)
                        url = driver.current_url
                    except:
                        url = driver.current_url
                    url = url.split('/')[2]

                    print(['pagination', title, category, url])
                    app_info = ['softwaresuggest', title, category, url]
                    with open(
                            '/Users/muhammadaqib/Documents/softwaresuggest.csv',
                            'a') as f_object:

                        writer_object = writer(f_object)
                        writer_object.writerow(app_info)

                    all_the_apps.append(app_info)
                    print(len(all_the_apps))

        if check_more_button:
            print('CHECK MORE BUTTON')
            while check_more_button:
                try:
                    wait = WebDriverWait(driver, 10)
                    accept = wait.until(
                        EC.element_to_be_clickable(
                            (By.XPATH,
                             '//*[@id="cat_list_tab_1"]/div[3]/button')))

                    actions = ActionChains(driver)
                    actions.move_to_element(accept).click().perform()
                except:
                    break

            soup = BeautifulSoup(driver.page_source, 'lxml')

            apps_on_page = soup.find('div', 'cat_list_append').find_all(
                'h3', 'slist_oftware_name')
            for app_item in apps_on_page:
                try:
                    driver.get(app_item.find('a')['href'])
                except:
                    app_url = app_item.find(
                        'span',
                        'd-flex align-items-center ga_track_soft_name new_link_onclick'
                    )['onclick'].split('(')[1][1:-11]
                    driver.get(app_url)
                soup = BeautifulSoup(driver.page_source, 'lxml')

                print(app_item.text.strip())
                title = app_item.text.strip()
                category = item[0]
                try:
                    find_app_url = soup.find(
                        'span',
                        'ga_track_vwl_comp_d comp_detail_vwb_btn cursor_pointer'
                    )['onclick']
                    driver.get(find_app_url.split('(')[1][1:-11])
                    time.sleep(5)
                    url = driver.current_url
                except:
                    url = driver.current_url
                url = url.split('/')[2]
                print(['check more button', title, category, url])
                app_info = ['softwaresuggest', title, category, url]

                with open('/Users/muhammadaqib/Documents/softwaresuggest.csv',
                          'a') as f_object:
                    writer_object = writer(f_object)
                    writer_object.writerow(app_info)

                all_the_apps.append(app_info)
                print(len(all_the_apps))

    driver.close()
Example #45
0
    def affiliation(self, elements, related):
        for web_site in elements:

            if web_site == "nature":
                # print("nature")
                for page in elements[web_site]:
                    page_content = requests.get(page).content
                    self.soup = BeautifulSoup(page_content, 'html.parser')
                    affi = [
                        i for i in self.soup.findAll("h2") if "id" in i.attrs
                        if i.attrs["id"] == "affiliations"
                    ][0]
                    unis = [
                        i.text.strip()
                        for i in affi.findNext("ol").findAll("h3")
                    ]
                    authors = [[
                        author.findAll("span")[1].text
                        for author in authorlist.findAll("li")
                    ] for authorlist in affi.findNext("ol").findAll("ul")]
                    self.author_affiliations_details.update({page: {}})
                    for author_s in authors:
                        for author in author_s:
                            self.author_affiliations_details[page][
                                author] = unis[authors.index(author_s)]
                    self.save_as_csv(self.author_affiliations_details[page],
                                     page,
                                     related=related)
                    # print(affiliation)
                pass

            if web_site == "science":
                # print("science")
                for page in elements[web_site]:
                    page_content = requests.get(page).content
                    self.soup = BeautifulSoup(page_content, 'html.parser')
                    self.author_affiliations_details.update({page: {}})
                    adress_S = {
                        i.find("sup").text:
                        i.text.replace(i.find("sup").text, "")
                        for i in self.soup.findAll("address")
                    }
                    # authors_a_A = [[j.text for j in i.findAll("sup")] for i in self.soup.findAll("li", attrs={"class":"contributor"})]
                    authors = {
                        i.find("span").text.strip():
                        [adress_S[j.text] for j in i.findAll("sup")]
                        for i in self.soup.findAll(
                            "li", attrs={"class", "contributor"})
                        if i.find("span")
                    }
                    self.author_affiliations_details.update({page: authors})
                    self.save_as_csv(self.author_affiliations_details[page],
                                     page,
                                     related=related)
                pass

            if web_site == "nejm":
                # print("nejm")
                for page in elements[web_site]:
                    page_content = requests.get(page).content
                    self.soup = BeautifulSoup(page_content, 'html.parser')
                    # print(self.soup.findAll("section"))
                    sec = [
                        i for i in self.soup.findAll("section")
                        if "id" in i.attrs
                        if i.attrs["id"] == "author_affiliations"
                    ][0]
                    all_d = [
                        i.find("p").text for i in sec.findAll("div")
                        if "id" in i.attrs
                    ][0]
                    # print(all_d)
                    loc = "/Users/dhaneesh.gk/Projects/own/web_import/extract_it/pages/poc_2/author_metadata/nejm.json"
                    info_nejm = json.loads(open(loc, "r").read())
                    self.author_affiliations_details.update({page: info_nejm})
                    self.save_as_csv(self.author_affiliations_details[page],
                                     page,
                                     related=related)
                pass

            if web_site == "ieee":
                # print("ieee")
                for page in elements[web_site]:
                    # ch_ieee = webdriver.Chrome(executable_path="/Users/dhaneesh.gk/Projects/own/web_import/extract_it/drivers/chromedriver")
                    ch_ieee = self.chrome_driver
                    ch_ieee.get(page)
                    ch_ieee.maximize_window()
                    # ss = ch_ieee.execute_script("document.querySelectorAll('span')")
                    # print(ss)
                    # affiliations = {page:{}}
                    # time.sleep(10)
                    # WebDriverWait(ch_ieee, 200).until(EC.element_to_be_clickable((By.XPATH,'//a[@aria-label="dismiss cookie message"]')))
                    # ch_ieee.find_element_by_xpath('//a[@aria-label="dismiss cookie message"]').click()
                    WebDriverWait(ch_ieee, 20).until(
                        EC.element_to_be_clickable(
                            (By.XPATH,
                             "//button[contains(@ng-click,'authors')]/i")))
                    # ch_ieee.find_element_by_xpath("//button[contains(@ng-click,'authors')]/i").click()
                    a_ex = ch_ieee.find_element_by_xpath(
                        "//section[div[@id='authors-section-container']]/button[contains(@ng-click,'authors')]"
                    )
                    action = ActionChains(ch_ieee)
                    action.move_to_element(a_ex).click().perform()
                    # a_ex.click()
                    author_ele = ch_ieee.find_elements_by_xpath(
                        '//section[button[contains(@ng-click,"authors")]]//span[@ng-bind-html="::item.name"]'
                    )
                    author_afi = ch_ieee.find_elements_by_xpath(
                        '//section[button[contains(@ng-click,"authors")]]//div[@ng-bind-html="::item.affiliation"]'
                    )
                    affiliation_ieee = {
                        i.text: author_afi[author_ele.index(i)].text
                        for i in author_ele
                    }
                    # affiliations[page].update(affiliation_ieee)
                    # print("affiliation_ieee",affiliation_ieee)
                    affiliation_ieee = None
                    if not affiliation_ieee:
                        loc = "/Users/dhaneesh.gk/Projects/own/web_import/extract_it/pages/poc_2/author_metadata/ieee.json"
                        affiliation_ieee = json.loads(open(loc, "r").read())
                    self.author_affiliations_details.update(
                        {page: affiliation_ieee})
                    self.save_as_csv(self.author_affiliations_details[page],
                                     page,
                                     related=related)
                    # time.sleep(200)
                # pass

            if web_site == "oup":
                # print("oup")
                try:
                    for page in elements[web_site]:
                        # ch_oup = webdriver.Chrome(executable_path="/Users/dhaneesh.gk/Projects/own/web_import/extract_it/drivers/chromedriver")
                        ch_oup = self.chrome_driver
                        ch_oup.get(page)
                        affi_oup = {}
                        eles_oup = ch_oup.find_elements_by_xpath(
                            '//span[@class="al-author-name"]/a')
                        # count = 1
                        for author_oup_e in eles_oup:
                            author_oup = author_oup_e.text
                            # print(author_oup)
                            affi_d_e = '//div[div[div[@class="info-card-name"][text()="{0}"]]]/div/div[@class="aff"]'.format(
                                author_oup)
                            author_oup_e.click()
                            affi_t = ch_oup.find_element_by_xpath(
                                affi_d_e).text.strip().replace("  ", "")
                            if not affi_t:
                                affi_t = "AGE Research Group, Institute of Neuroscience, Newcastle University, Newcastle upon Tyne, UK"
                            affi_oup.update({author_oup: affi_t})
                        self.author_affiliations_details.update(
                            {page: affi_oup})
                        self.save_as_csv(
                            self.author_affiliations_details[page],
                            page,
                            related=related)
                except Exception:
                    # print("Error in oup affiliations")
                    pass

                pass

            if web_site == "academicradiology":
                # print("academicradiology")
                for page in elements[web_site]:
                    page_content = requests.get(page).content
                    self.soup = BeautifulSoup(page_content, 'html.parser')
                    affi_aca = {}
                    for i in self.soup.findAll("div",
                                               attrs={"class", "author"}):
                        author_acad = [
                            author.text for author in i.findAll("a")
                            if "class" in author.attrs
                            if "openAuthorLayer" in author.attrs["class"]
                        ][0]
                        affi_aca.update({author_acad: []})
                        uni = []
                        for a_i in i.findAll("ul",
                                             attrs={"class", "affiliations"}):
                            if not a_i.find("li").text in uni:
                                uni.append(a_i.find("li").text)
                        affi_aca[author_acad] = uni
                    self.author_affiliations_details.update({page: affi_aca})
                    self.save_as_csv(self.author_affiliations_details[page],
                                     page,
                                     related=related)
                    # print(affi)

                    # affi = {[author.text for author in i.findAll("a") if "class" in author.attrs if "openAuthorLayer" in author.attrs["class"]][0]:[a_i.find("li").text for a_i in i.findAll("ul",attrs={"class","affiliations"})] for i in self.soup.findAll("div",attrs={"class","author"})}

                pass
Example #46
0
----------------------------
鼠标动作链					|
----------------------------
	from selenium import webdriver
	from selenium.webdriver import ActionChains
	driver = webdriver.PhantomJS(executable_path='./phantomjs')

	# 获取节点对象
	photo = driver.find_element_by_id('photo')

	# 通过driver创建Action调用链对象
	action = ActionChains(driver)

	# 移动鼠标到指定的节点
	action.move_to_element(photo).perform()

	# 单击指定节点
	action.move_to_element(photo).click(photo).perform()

	# 双击指定节点
	action.move_to_element(photo).double_click(photo).perform()

	# 右击指定节点
	action.move_to_element(photo).context_click(photo).perform()

	# 左键hold住指定节点
	action.move_to_element(photo).click_and_hold(photo).perform()

	# 把photo节点拖拽到next节点
	action.drag_and_drop(photo, driver.find_element_by_id('next')).perform()
Example #47
0
class Product(Page):

    ALL_PRODUCT_LINKS = (By.XPATH, "//ul[contains(@class, 'nav-dropdown-default')]//a")
    PRODUCT_DESCRIPTION_LINK = (By.XPATH, "//li[@id='tab-title-description']//a")
    PRODUCT_DESCRIPTION_TAB = (By.XPATH, "//li[@id='tab-title-description']")
    PRODUCT_NAME = (By.CSS_SELECTOR, 'h1.product-title')
    PRODUCT_PRICE = (By.CSS_SELECTOR, 'p.price span.amount')
    ADD_TO_CART_BUTTON = (By.CSS_SELECTOR, 'button.single_add_to_cart_button')

    HOME_BUTTON = (By.CSS_SELECTOR, "div.product-info  a[href='https://gettop.us']")

    HEART_BUTTON = (By.CSS_SELECTOR, "button.wishlist-button")

    # collect links for all products on the site
    def open_product_pages(self):
        self.wait_for_presence_off_all_elements(self.ALL_PRODUCT_LINKS)
        product_links = self.grab_href_links_from_a_tags(*self.ALL_PRODUCT_LINKS)
        return product_links


    # Verify clicking Logo Icon takes user to Home Page from every Product page
    def verify_return_to_home_page_from_every_product_pages(self):
        self.wait_for_presence_off_all_elements(self.ALL_PRODUCT_LINKS)
        product_links = self.grab_href_links_from_a_tags(*self.ALL_PRODUCT_LINKS)
        top_menu = TopMenu(self.driver)
        for product in product_links:
            self.open_page(product)
            top_menu.click_logo_icon()
            top_menu.verify_home_page()


    # verify every product has description tab
    def verify_description(self):
        self.wait_for_presence_off_all_elements(self.ALL_PRODUCT_LINKS)
        product_links = self.grab_href_links_from_a_tags(*self.ALL_PRODUCT_LINKS)
        for product in product_links:
            self.open_page(product)
            self.find_element(*self.PRODUCT_DESCRIPTION_TAB)


    # verify every product has name
    def verify_product_name(self, name: str):
        product_name = self.find_element(*self.PRODUCT_NAME).get_attribute('textContent')
        assert name in product_name, f'Expected to see {name}, but got {product_name}'


    # verify fields sale price and original price not empty
    def verify_price_and_sale_price(self):
        product_name = self.find_element(*self.PRODUCT_NAME).get_attribute('textContent')
        product_price = self.find_elements(*self.PRODUCT_PRICE)
        for _ in range(len(product_price)):
            assert product_price[_].text != '', \
                f'Product price on {product_name} product page is missing'


    # click add to cart button
    def click_add_to_cart(self):
        self.click(*self.ADD_TO_CART_BUTTON)


    # Verify Home link takes user to Home Page from every Product page
    def verify_home_link_from_every_product_page(self):
        self.wait_for_presence_off_all_elements(self.ALL_PRODUCT_LINKS)
        product_links = self.grab_href_links_from_a_tags(*self.ALL_PRODUCT_LINKS)
        top_menu = TopMenu(self.driver)
        for product in product_links:
            self.open_product_page(product)
            self.click(*self.HOME_BUTTON)
            top_menu.verify_home_page()


    # User can add correct item to Wishlist, remove item and see a confirmation Pop-up
    def add_correct_item_to_wishlist(self):
        self.wait_for_presence_off_all_elements(self.ALL_PRODUCT_LINKS)
        product_links = self.grab_href_links_from_a_tags(*self.ALL_PRODUCT_LINKS)
        for _ in product_links:
            self.open_product_page(_)

            # remember product name
            product_name = self.find_element(*self.PRODUCT_NAME).get_attribute('textContent')

            # click Heart Icon to add item to Wishlist Page
            self.actions = ActionChains(self.driver)
            self.actions.move_to_element(self.find_element(*self.HEART_BUTTON)).click().perform()

            # click Heart Icon again to go to Wishlist Page
            current_url = self.driver.current_url
            self.wait_for_element_clickable(self.HEART_BUTTON)
            self.click(*self.HEART_BUTTON)

            # verify product was added to Wishlist with the same name
            self.wait_for_url_change(current_url)
            wishlist_page = WishList(self.driver)
            wishlist_page.verify_wishlist_product_name(product_name)

            # Remove product from Wishlist and verify Empty Wishlist message
            wishlist_page.remove_item_from_wishlist()

            # # return to home page
            self.open_page()


    # User can add correct item to Wishlist, see social logos, remove item and see a confirmation Pop-up
    def verify_wishlist_has_social_logos(self):
        self.wait_for_presence_off_all_elements(self.ALL_PRODUCT_LINKS)
        product_links = self.grab_href_links_from_a_tags(*self.ALL_PRODUCT_LINKS)
        for _ in product_links:
            self.open_product_page(_)

            # remember product name
            product_name = self.find_element(*self.PRODUCT_NAME).get_attribute('textContent')

            # click Heart Icon to add item to Wishlist Page
            self.actions = ActionChains(self.driver)
            self.actions.move_to_element(self.find_element(*self.HEART_BUTTON)).click().perform()

            # click Heart Icon again to go to Wishlist Page
            current_url = self.driver.current_url
            self.wait_for_element_clickable(self.HEART_BUTTON)
            self.click(*self.HEART_BUTTON)

            # verify product was added to Wishlist with the same name
            self.wait_for_url_change(current_url)
            wishlist_page = WishList(self.driver)
            wishlist_page.verify_wishlist_product_name(product_name)

            # verify User can see social logos
            wishlist_page.verify_social_logos()

            # Remove product from Wishlist and verify Empty Wishlist message
            wishlist_page.remove_item_from_wishlist()

            # # return to home page
            self.open_page()


    # User add correct item to Wishlist, verify User can click on wishlist item and is taken to correct product page
    def verify_wishlist_correct_link(self):
        self.wait_for_presence_off_all_elements(self.ALL_PRODUCT_LINKS)
        product_links = self.grab_href_links_from_a_tags(*self.ALL_PRODUCT_LINKS)
        for _ in product_links:
            self.open_product_page(_)

            # remember product name
            product_name = self.find_element(*self.PRODUCT_NAME).get_attribute('textContent')

            # click Heart Icon to add item to Wishlist Page
            self.actions = ActionChains(self.driver)
            current_url = self.driver.current_url
            self.actions.move_to_element(self.find_element(*self.HEART_BUTTON)).click().perform()

            # click Heart Icon again to go to Wishlist Page
            self.wait_for_element_clickable(self.HEART_BUTTON)
            self.click(*self.HEART_BUTTON)
            self.wait_for_url_change(current_url)

            # verify product was added to Wishlist with the same name
            wishlist_page = WishList(self.driver)
            wishlist_page.verify_wishlist_product_name(product_name)
            current_url = self.driver.current_url

            # click on wishlist item link
            wishlist_page.click_item_link()
            self.wait_for_url_change(current_url)

            # verify link takes user to correct item page
            new_product_name = self.find_element(*self.PRODUCT_NAME).get_attribute('textContent')
            assert product_name == new_product_name, \
                f'Expected to see {product_name}, but got to the page with {new_product_name}'
            current_url = self.driver.current_url

            # click Heart Icon again to go to Wishlist Page
            self.actions = ActionChains(self.driver)
            self.actions.move_to_element(self.find_element(*self.HEART_BUTTON)).click().perform()
            self.wait_for_url_change(current_url)

            # Remove product from Wishlist and verify Empty Wishlist message
            wishlist_page.remove_item_from_wishlist()

            # # return to home page
            self.open_page()


    # User can click trough multiple product pages by clicking 1, 2 for page number
    def clicks_through_product_pages_with_1_2(self):
        pass


    # User can click trough multiple product pages by clicking > and <
    def clicks_through_product_pages_with_arrows(self):
        pass
Example #48
0
if os.path.exists(prefixpathname):
    pass
else:
    os.mkdir(prefixpathname)
# driver.find_element_by_xpath("//ul[@id='stock_list']/li[1]").send_keys(Keys.ENTER)
# 切换网页,以获取新弹出的网页窗口
for handle in driver.window_handles:
    driver.switch_to_window(handle)
    # print('current url:%s'%driver.current_url)
time.sleep(1)
urldata = driver.find_element_by_xpath("//ul[@id='category_list']")
# print('%s'%urldata.text)
chain = ActionChains(driver)
moveelment = driver.find_element_by_xpath(
    "//div[@class='search-condition c5 drop-down']/a/div")
chain.move_to_element(moveelment).perform()
driver.find_element_by_xpath(
    "//div[@class='search-condition c5 drop-down']/a/div").click()

urldata = driver.find_element_by_xpath(
    "//div[@class='search-condition c5 drop-down']/a/div")
# print('%s'%urldata.text)
driver.find_element_by_xpath("//ul[@id='category_list']/li[1]/a").click()
# 选择需要的项,年报,半年报...等等
# 如果需要下载全部数据,需要点击更多,直到数据全部显示
# while(rslt[0] != rslt[1]):
#    driver.find_element_by_link_text('更多').click()
#    #等待网页相应时间
#    time.sleep(1)
#    urldata = driver.find_element_by_xpath("//div[@id='con-div-his-fulltext']/div[@class='stat-right']")
#    print('%s'%urldata.text)
Example #49
0
        EC.presence_of_element_located((By.XPATH,'//*[@id="keywords_input"]')))
time.sleep(5)
try:
    elem3.clear()
    elem3.send_keys("McDonald's")
finally:
    elem3.send_keys(Keys.ARROW_DOWN)
    elem3.send_keys(Keys.ENTER)
time.sleep(2)
# Collecting the URLs for listings pages 
link1 = driver.current_url
elem4 = driver.find_element_by_css_selector('a.paginator_item:nth-child(4)')
if 'firefox' in driver.capabilities['browserName']:
    scroll_shim(driver, elem4)
actions = ActionChains(driver)
actions.move_to_element(elem4)
actions.perform()
try:
    elem4.click()
except StaleElementReferenceException:
    pass
link2 = driver.current_url
driver.quit()

# Scrapping the URLs of all the listings of McD in Pune.
agent = {"User-Agent":"Mozilla/5.0"}
page1_html = requests.get(link1, headers=agent)
page1_data = page1_html.content
soup1 = BeautifulSoup(page1_data, "lxml")
page2_html = requests.get(link2, headers=agent)
page2_data = page2_html.content
from selenium.webdriver import ActionChains
from selenium.webdriver.support.ui import Select
import time

driver = webdriver.Chrome(
    executable_path=
    r"C:\Users\mushtaq.hussain\PycharmProjects\Selenium\driver\chromedriver.exe"
)
driver.maximize_window()
driver.get("https://www.ounass.ae/")
time.sleep(2)
driver.find_element_by_id("onesignal-slidedown-cancel-button").click()
time.sleep(2)
action = ActionChains(driver)
firstLevelMenu = driver.find_element_by_class_name("Popup-iconText")
action.move_to_element(firstLevelMenu).perform()
time.sleep(2)
loginButton = driver.find_element_by_xpath(
    "//button[contains(text(),'Log In')]")
action.move_to_element(loginButton).click().perform()
email = driver.find_element_by_class_name("SignInForm-email")
email.send_keys("*****@*****.**")
password = driver.find_element_by_class_name("PasswordField-password")
password.send_keys("majid@123")
time.sleep(2)
loginButton = driver.find_element_by_xpath(
    "//button[contains(text(),'Log In')]")
loginButton.click()
time.sleep(2)
driver.find_element_by_class_name("Popup-iconText").click()
emailField = driver.find_element_by_class_name("MyAccountPage-link")
Example #51
0
            result = driver.find_element_by_xpath(input_string)
            #  print(_)
            return result
        except BaseException:
            sleep(0.5)
            pass
    #  print("Overtime 20 seconds")
    return None


sleep(1)
first_image = driver.find_element_by_tag_name("img")
#  first_image.click()
#  first_image.send_keys(Keys.END)
actions = ActionChains(driver)
actions.move_to_element(first_image)
for _ in range(100):
    actions.send_keys(Keys.DOWN)
    actions.send_keys(Keys.RIGHT)
    actions.perform()
    sleep(0.1)

sleep(2)
#  allImages = driver.find_elements(By.TAG_NAME("img"))
allImages = driver.find_elements_by_tag_name("img")

#  print(allImages)
for _ in allImages:
    imageurl = _.get_attribute("src")
    print(imageurl)
Example #52
0
 def mouse_hover(self, element):
     act = ActionChains(self.driver)
     act.move_to_element(self, element).perform()
Example #53
0
driver = webdriver.Chrome(Path.joinpath(Path.cwd().parent, "drivers", "chromedriver"))

driver.maximize_window()

driver.get("http://www.leafground.com/")

driver.find_element_by_xpath("//img[@src='./images/mouseOver.png']").click()

time.sleep(2)

testleaf_courses = driver.find_element_by_xpath("//a[@class='btnMouse']")

actions = ActionChains(driver)

actions.move_to_element(testleaf_courses).perform()

link_texts = driver.find_elements_by_xpath("//li/a[text()='TestLeaf Courses']/parent::li/ul/li/a")

#Print all the links 
for text in link_texts:
    print(text.text)


#Click any link and handle the alert
link_texts[1].click()
time.sleep(1)
driver.switch_to.alert.accept()


time.sleep(2)
Example #54
0
from selenium import webdriver
from selenium.webdriver import ActionChains

driver = webdriver.Chrome(executable_path="c:\\chromedriver.exe")

driver.get("https://www.rahulshettyacademy.com/AutomationPractice/")

# for any mouse driven work in web pages like double click, mouse over etc ActionChains class is to be imported
# in ActionChains class driver object should be given as an argument to pass it to the object objAction
objAction = ActionChains(driver)

mouseOverMenu = driver.find_element_by_css_selector("#mousehover")

objAction.move_to_element(mouseOverMenu).perform(
)  # perform() method to be added any ActionChains class,
# otherwise no action will happen

mouseOverClick = driver.find_element_by_link_text("Top")

objAction.move_to_element(mouseOverClick).click().perform()
Example #55
0
import time

from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.chrome.options import Options

chromeOptions = Options()
chromeOptions.add_experimental_option(
    "prefs", {"download.default_directory": "C:\\Documents"})

driver = webdriver.Chrome(
    executable_path="E:\Drivers\chromedriver_win32 (2)\chromedriver.exe",
    chrome_options=chromeOptions)
driver.maximize_window()
driver.get("http://demo.automationtesting.in/FileDownload.html")
textbox = driver.find_element_by_id("pdfbox")
driver.execute_script("arguments[0].scrollIntoView();", textbox)
textbox.send_keys("Sample selenium code")
driver.find_element_by_id("createPdf").click()
action = ActionChains(driver)
action.move_to_element(
    driver.find_element_by_css_selector(
        "a#pdf-link-to-download")).click().perform()
time.sleep(5)

# driver.close()
Example #56
0
    def testMemberAdd(self):
        driver = self.driver
        conf = self.conf
        state = conf.state
        conf.stateChange(driver)
        driver.implicitly_wait(10)

        # MM002 添加会员

        # 选择运营支撑平台
        driver.find_element_by_id('topMenu_1100').click()
        # 指定元素:会员管理
        button = driver.find_element_by_id('left_menu_1210')
        # 指定元素:菜单
        menu = driver.find_element_by_class_name('nav-header')

        # 鼠标移动到会员管理上
        chain = ActionChains(driver)
        chain.move_to_element(button).perform()
        driver.implicitly_wait(10)
        # 指定元素:会员信息维护,并点击操作
        driver.find_element_by_xpath(
            '//li[@id="left_menu_1211"]/a/span').click()
        chain.move_to_element(menu).perform()
        time.sleep(1)
        # 切换至iframe
        driver.switch_to_frame('contentIframe1211')

        # 添加会员
        if not driver.find_element_by_id('btnAdd').is_displayed():
            driver.find_element_by_class_name('open-close').click()
        time.sleep(0.5)
        driver.find_element_by_id('btnAdd').click()
        driver.implicitly_wait(10)

        # 输入会员名称
        member_name = ranEN(8)
        time.sleep(2)
        driver.find_element_by_name('name').send_keys(member_name)

        # 从数据库查推荐人&安置人编号(取最新一条)
        member = Oradao.sqlDiy(
            Oradao(), 'select * from MM_MEMBER m where m.company_code=\'' +
            state + '\' order by m.create_date desc')
        member_no = member['MEMBER_NO'][0]
        member_id = member['ID'][0]
        driver.find_element_by_name('sponsorMemberNo').send_keys(member_no)

        # 判断是否自动安置
        Placement = Oradao.sqlDiy(
            Oradao(), 'select * from MM_MEMBER_CHANGE c where c.member_id=' +
            str(member_id) +
            'and c.operate_type=50 order by c.create_date desc')
        len = Placement['ID'].__len__()
        if len == 0:
            value = 0
        else:
            value = Placement['NEW_VALUE'][0]
        if value == 0:
            driver.find_element_by_name('placementMemberNo').send_keys(
                member_no)

        # 输入身份证
        if state == 'US':
            identification = str(ranNo(100000000, 999999999))
        else:
            identification = str(ranNo(400000000000000000, 999999999999999999))
        driver.find_element_by_id('sinTaxId').send_keys(identification)

        # 输入移动电话
        mobilePhone = str(ranNo(13500000000, 13799999999))
        driver.find_element_by_id('mobilePhone').send_keys(mobilePhone)

        # 保存
        driver.switch_to_default_content()
        driver.execute_script('scrollTo(0,500)')
        driver.switch_to_frame('contentIframe1211')
        driver.find_element_by_id('btnSubmit').click()
        driver.implicitly_wait(20)

        # 依次 点击 2个 返回
        driver.switch_to_default_content()
        driver.execute_script('scrollTo(0,0)')
        driver.switch_to_frame('contentIframe1211')
        driver.find_element_by_xpath(
            '//form[@id="inputForm"]/div[1]/div[3]/input[12]').click()

        driver.switch_to_default_content()
        driver.execute_script('scrollTo(0,500)')
        driver.switch_to_frame('contentIframe1211')
        driver.find_element_by_xpath(
            '//div[@id="showSaveDiv"]/div/input[5]').click()

        driver.switch_to_default_content()
        driver.execute_script('scrollTo(0,0)')
        driver.switch_to_frame('contentIframe1211')

        # 新增会员断言
        memberNew = Oradao.sqlDiy(
            Oradao(), 'select * from MM_MEMBER m where m.company_code=\'' +
            state + '\' order by m.create_date desc')
        memberNo = memberNew['MEMBER_NO'][0]
        if not driver.find_element_by_id('btnAdd').is_displayed():
            driver.find_element_by_class_name('open-close').click()
        time.sleep(0.5)
        driver.find_element_by_name('sp_memberNo_ILIKE').send_keys(memberNo)
        driver.find_element_by_id('btnSubmit').click()
        time.sleep(2)

        # 获取列表会员编号
        rsMemberNo = driver.find_elements_by_xpath(
            '//table[@id="treeTable1"]/tbody/tr/td[2]')[0].text
        self.assertEquals(rsMemberNo, memberNo)
 def float_element(self, target_ele):
     chain = ActionChains(self.driver)
     chain.move_to_element(target_ele).perform()
Example #58
0
class SeleneElement(with_metaclass(DelegatingMeta, IWebElement)):
    @property
    def __delegate__(self):
        # type: () -> IWebElement
        return self._locator.find()

    # todo: is this alias needed?
    def get_actual_webelement(self):
        # type: () -> IWebElement
        return self.__delegate__

    # todo: consider removing this method once conditions will be refactored
    # todo: (currently Condition impl depends on this method)
    def __call__(self):
        return self.__delegate__

    # todo: or... maybe better will be remove __delegate__, and just use __call_ instead... ?

    @classmethod
    def by(cls, by, webdriver, context=None):
        # type: (Tuple[str, str], IWebDriver, ISearchContext) -> SeleneElement
        if not context:
            context = webdriver

        return SeleneElement(WebDriverWebElementLocator(by, context),
                             webdriver)

    @classmethod
    def by_css(cls, css_selector, webdriver, context=None):
        # type: (str, IWebDriver, ISearchContext) -> SeleneElement
        if not context:
            context = webdriver

        return SeleneElement.by((By.CSS_SELECTOR, css_selector), webdriver,
                                context)

    @classmethod
    def by_css_or_by(cls, css_selector_or_by, webdriver, context=None):
        if not context:
            context = webdriver

        return SeleneElement.by(css_or_by_to_by(css_selector_or_by), webdriver,
                                context)

    # todo: consider renaming webdriver to driver, because actually SeleneDriver also can be put here...
    def __init__(self, selene_locator, webdriver):
        # type: (ISeleneWebElementLocator, IWebDriver) -> None
        self._locator = selene_locator
        self._webdriver = webdriver
        self._actions_chains = ActionChains(webdriver)

    def __str__(self):
        return self._locator.description

    def _execute_on_webelement(self, command, condition=be.or_not_to_be):
        return command(_wait_with_screenshot(self._webdriver, self, condition))

    # *** Relative elements ***

    def element(self, css_selector_or_by):
        return SeleneElement(
            InnerWebElementLocator(css_or_by_to_by(css_selector_or_by), self),
            self._webdriver)

    s = element
    find = element

    # todo: consider making find a separate not-lazy method (not alias)
    # to be used in such example: s("#element").hover().find(".inner").click()
    #                       over: s("#element").hover().element(".inner").click()
    # todo: should then all action-commands return cached elements by default?

    # todo: this is an object, it does not find. should we switch from method to "as a property" implementation?
    def caching(self):
        return SeleneElement(CachingWebElementLocator(self), self._webdriver)

    # todo: cached or cache?
    def cached(self):
        caching = self.caching()
        return caching.should(be.in_dom)

    def all(self, css_selector_or_by):
        # return SeleneCollection.by_css_or_by(css_selector_or_by, self._webdriver, context=self)
        return SeleneCollection(
            InnerListWebElementLocator(css_or_by_to_by(css_selector_or_by),
                                       self), self._webdriver)

    ss = all
    elements = all
    find_all = all

    @property
    def parent_element(self):
        return self.element(by.be_parent())

    @property
    def following_sibling(self):
        return self.element(by.be_following_sibling())

    @property
    def first_child(self):
        return self.element(by.be_first_child())

    # *** Asserts (Explicit waits) ***

    def should(self, condition, timeout=None):
        if timeout is None:
            timeout = config.timeout
        # todo: implement proper cashing
        # self._found = wait_for(self, condition, timeout)
        _wait_with_screenshot(self._webdriver, self, condition, timeout)
        return self

    # todo: consider removing some aliases
    def assure(self, condition, timeout=None):
        return self.should(condition, timeout)

    def should_be(self, condition, timeout=None):
        return self.should(condition, timeout)

    def should_have(self, condition, timeout=None):
        return self.should(condition, timeout)

    def should_not(self, condition, timeout=None):
        if timeout is None:
            timeout = config.timeout
        # todo: implement proper cashing
        not_condition = not_(condition)
        _wait_with_screenshot(self._webdriver, self, not_condition, timeout)
        return self

    # todo: consider removing some aliases
    def assure_not(self, condition, timeout=None):
        return self.should_not(condition, timeout)

    def should_not_be(self, condition, timeout=None):
        return self.should_not(condition, timeout)

    def should_not_have(self, condition, timeout=None):
        return self.should_not(condition, timeout)

    # *** Additional actions ***

    def double_click(self):
        self._execute_on_webelement(
            lambda it: self._actions_chains.double_click(it).perform(),
            condition=be.visible)
        return self

    def context_click(self):
        self._execute_on_webelement(
            lambda it: self._actions_chains.context_click(it).perform(),
            condition=be.visible)
        return self

    def set(self, new_text_value):
        def clear_and_send_keys(webelement):
            webelement.clear()
            webelement.send_keys(new_text_value)

        self._execute_on_webelement(clear_and_send_keys, condition=be.visible)

        return self

    set_value = set

    def scroll_to(self):
        def js_scroll_to(webelement):
            location = webelement.location
            self._webdriver.execute_script("window.scrollTo({x},{y});".format(
                x=location['x'], y=location['y']))

        self._execute_on_webelement(js_scroll_to, condition=be.visible)

        return self

    def press_enter(self):
        return self.send_keys(Keys.ENTER)

    def press_escape(self):
        return self.send_keys(Keys.ESCAPE)

    def press_tab(self):
        return self.send_keys(Keys.TAB)

    def hover(self):
        self._execute_on_webelement(
            lambda it: self._actions_chains.move_to_element(it).perform(),
            condition=be.visible)
        return self

    # *** ISearchContext methods ***

    def find_elements(self, by=By.ID, value=None):
        return self._execute_on_webelement(
            lambda it: it.find_elements(by, value), condition=be.visible)
        # return self.__delegate__.find_elements(by, value) # todo: remove

    def find_element(self, by=By.ID, value=None):
        return self._execute_on_webelement(
            lambda it: it.find_element(by, value), condition=be.visible)
        # return self.__delegate__.find_element(by, value) # todo: remove

    # *** IWebElement methods ***

    @property
    def tag_name(self):
        return self._execute_on_webelement(lambda it: it.tag_name,
                                           condition=be.in_dom)

    @property
    def text(self):
        return self._execute_on_webelement(lambda it: it.text,
                                           condition=be.visible)

    def click(self):
        self._execute_on_webelement(lambda it: it.click(),
                                    condition=be.visible)
        return self  # todo: think on: IWebElement#click was supposed to return None

    def submit(self):
        self._execute_on_webelement(lambda it: it.submit(),
                                    condition=be.visible)
        return self

    def clear(self):
        self._execute_on_webelement(lambda it: it.clear(),
                                    condition=be.visible)
        return self

    def get_attribute(self, name):
        return self._execute_on_webelement(lambda it: it.get_attribute(name),
                                           condition=be.in_dom)

    def is_selected(self):
        return self._execute_on_webelement(lambda it: it.is_selected(),
                                           condition=be.visible)

    def is_enabled(self):
        return self._execute_on_webelement(lambda it: it.is_enabled(),
                                           condition=be.visible)

    def send_keys(self, *value):
        self._execute_on_webelement(lambda it: it.send_keys(*value),
                                    condition=be.visible)
        return self

    # RenderedWebElement Items
    def is_displayed(self):
        return self._execute_on_webelement(lambda it: it.is_displayed(),
                                           condition=be.in_dom)

    @property
    def location_once_scrolled_into_view(self):
        return self._execute_on_webelement(
            lambda it: it.location_once_scrolled_into_view,
            condition=be.visible)

    @property
    def size(self):
        return self._execute_on_webelement(lambda it: it.size,
                                           condition=be.visible)

    def value_of_css_property(self, property_name):
        return self._execute_on_webelement(
            lambda it: it.value_of_css_property(property_name),
            condition=be.in_dom)

    @property
    def location(self):
        return self._execute_on_webelement(lambda it: it.location,
                                           condition=be.visible)

    @property
    def rect(self):
        return self._execute_on_webelement(lambda it: it.rect,
                                           condition=be.visible)

    @property
    def screenshot_as_base64(self):
        return self._execute_on_webelement(
            lambda it: it.screenshot_as_base64,
            condition=be.visible)  # todo: or `be.in_dom`?

    @property
    def screenshot_as_png(self):
        return self._execute_on_webelement(
            lambda it: it.screenshot_as_png,
            condition=be.visible)  # todo: or `be.in_dom`?

    def screenshot(self, filename):
        return self._execute_on_webelement(
            lambda it: it.screenshot(filename),
            condition=be.visible)  # todo: or `be.in_dom`?

    @property
    def parent(self):
        return self._execute_on_webelement(
            lambda it: it.
            parent,  # todo: should not we return here some Selene entity as search_context?
            condition=be.in_dom)

    @property
    def id(self):
        return self._execute_on_webelement(lambda it: it.id,
                                           condition=be.in_dom)
Example #59
0
def add_data(local):
    driver = webdriver.Chrome(
        "C://Program Files//chromedriver//chromedriver.exe")

    # 카카오 지도에 "XX 빵집" 검색
    driver.get(f"https://map.kakao.com/")

    search_box = driver.find_element_by_css_selector("#search\.keyword\.query")
    search_box.send_keys(f"{local} 빵집")
    search_box.send_keys(Keys.ENTER)

    time.sleep(3)

    links = driver.find_elements_by_css_selector(
        "#info\.search\.place\.list > li")
    target = driver.find_element_by_css_selector("#info\.search\.place")
    banghae = driver.find_element_by_css_selector("#dimmedLayer")

    for link in links:
        try:
            a = link.find_element_by_css_selector(
                "div.info_item > div.contact.clickArea > a.moreview")
            a.send_keys(Keys.ENTER)
            time.sleep(1)
            driver.switch_to_window(driver.window_handles[1])
            # 데이터생성 작업시작
            # name 정보수집
            name = driver.find_element_by_css_selector(
                "#mArticle > div.cont_essential > div:nth-child(1) > div.place_details > div > h2"
            )
            name_text = name.text

            # address 정보수집
            try:
                address = driver.find_element_by_css_selector(
                    "#mArticle > div.cont_essential > div.details_placeinfo > div:nth-child(2) > div > span.txt_address"
                )
                address_text = address.text
            except:
                address_text = ""

            # phone_number 정보수집
            try:
                phone = driver.find_element_by_css_selector(
                    "#mArticle > div.cont_essential > div.details_placeinfo > div.placeinfo_default.placeinfo_contact > div > div > span > span.txt_contact"
                )
                phone_text = phone.text
            except:
                phone_text = ""

            try:
                # 영업일 더보기정보 클릭
                date_btn = driver.find_element_by_css_selector(
                    "#mArticle > div.cont_essential > div.details_placeinfo > div:nth-child(3) > div > div.location_present > ul > li > a"
                )
                date_btn.send_keys(Keys.ENTER)
                # business hour 정보수집
                business_hours = driver.find_element_by_css_selector(
                    "#mArticle > div.cont_essential > div.details_placeinfo > div:nth-child(3) > div > div.fold_floor > div > ul:nth-child(2)"
                )
                business_hours_text = business_hours.text
                # 뜬 창 닫기
                close_btn = driver.find_element_by_css_selector(
                    "#mArticle > div.cont_essential > div.details_placeinfo > div:nth-child(3) > div > div.fold_floor > div > a"
                )
                close_btn.send_keys(Keys.ENTER)
            except NoSuchElementException:
                try:
                    business_hours = driver.find_element_by_css_selector(
                        "#mArticle > div.cont_essential > div.details_placeinfo > div:nth-child(3) > div > div > ul > li > span"
                    )
                    business_hours_text = business_hours.text
                except NoSuchElementException:
                    business_hours_text = ""

            # 스크롤 내리기
            body = driver.find_element_by_css_selector("body")
            body.send_keys(Keys.PAGE_DOWN)

            # sub_name 데이터 수집
            try:
                sub_name = driver.find_element_by_css_selector(
                    "#mArticle > div.cont_essential > div.details_placeinfo > div.placeinfo_default.open_on > div > p"
                )
                sub_name_text = sub_name.text
            except NoSuchElementException:
                sub_name_text = ""

            # menus_list 데이터 수집
            menus = driver.find_elements_by_css_selector("ul.list_menu > li")
            menus_list = []
            for menu in menus:
                if menu.find_element_by_css_selector(
                        "div span.loss_word").text == "":
                    break
                add = []
                add.append(
                    menu.find_element_by_css_selector(
                        "div span.loss_word").text)
                try:
                    add.append(
                        int(
                            menu.find_element_by_css_selector(
                                "div em.price_menu").text.replace(",", "")))
                except:
                    pass
                menus_list.append(add)

            # 사진 데이터 수집
            try:
                photo_button = driver.find_element_by_css_selector(
                    "#mArticle > div.cont_photo > div.photo_area > ul > li.size_l > a"
                )
                action = ActionChains(driver)
                action.move_to_element(photo_button).perform()
                photo_button.send_keys(Keys.ENTER)
                urls = []
                time.sleep(2)
                imgs = driver.find_elements_by_css_selector(
                    "ul.list_phtoview > li")
                for index, img in enumerate(imgs):
                    if index == 3:
                        break
                    link = img.find_element_by_css_selector("a")
                    link.send_keys(Keys.ENTER)
                    time.sleep(1)
                    real_link = driver.find_element_by_css_selector(
                        "#photoViewer > div.layer_body > div.view_photo > div.view_image > img"
                    )
                    urls.append(real_link.get_attribute("src"))
                time.sleep(3)
                chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890"
                random_names = []
                for name in range(len(urls)):
                    random_names.append("".join(
                        (random.choice(chars)) for x in range(10)))
                for index, url in enumerate(urls):
                    # urlretrieve는 다운로드 함수
                    urllib.request.urlretrieve(
                        url,
                        os.path.join(
                            BASE_DIR,
                            f"uploads/bakery/bread_imgs/{random_names[index]}.jpg",
                        ),
                    )
            except:
                pass

            # lat,lng 정보수집
            driver.get(
                f"https://www.google.co.kr/maps/@37.053745,125.6553969,5z?hl=ko"
            )

            google_search_box = driver.find_element_by_css_selector(
                "#searchboxinput")
            google_search_box.send_keys(name_text)
            google_search_box.send_keys(Keys.ENTER)

            time.sleep(3)

            try:
                # 검색했는데 바로 상세로 안가고 목록으로 가면 가장 첫번째 목록 클릭
                go_to = driver.find_element_by_css_selector(
                    "#pane > div > div.widget-pane-content.scrollable-y > div > div > div.section-layout.section-scrollbox.scrollable-y.scrollable-show.section-layout-flex-vertical > div.section-layout.section-scrollbox.scrollable-y.scrollable-show.section-layout-flex-vertical > div:nth-child(1) > div.section-result-content > div.section-result-text-content"
                )
                go_to.send_keys(Keys.ENTER)

                time.sleep(3)

                lat_text = float(
                    driver.current_url.split("@")[1].split(",")[0])
                lng_text = float(
                    driver.current_url.split("@")[1].split(",")[1])

            except:
                # 목록이 안뜰경우
                try:
                    # 상세로 간 경우
                    ex = driver.find_element_by_css_selector(
                        "#pane > div > div.widget-pane-content.scrollable-y > div > div > div.section-hero-header-title > div.section-hero-header-title-top-container > div.section-hero-header-title-description > div:nth-child(1) > h1 > span:nth-child(1)"
                    )
                    lat_text = float(
                        driver.current_url.split("@")[1].split(",")[0])
                    lng_text = float(
                        driver.current_url.split("@")[1].split(",")[1])
                except:
                    # 검색결과를 찾지 못한경우
                    lat_text = 0
                    lng_text = 0

            # print(
            #     name_text,
            #     sub_name_text,
            #     address_text,
            #     business_hours_text,
            #     lat_text,
            #     lng_text,
            #     phone_text,
            #     menus_list,
            # )
            try:
                bakery = models.Bakery.objects.get(name=name_text)
            except:
                models.Bakery.objects.create(
                    name=name_text,
                    sub_name=sub_name_text,
                    lat=lat_text,
                    lng=lng_text,
                    address=address_text,
                    phone_number=phone_text,
                    business_hour=business_hours_text,
                    city=local,
                )
                for index, url in enumerate(urls):
                    img = models.Photo()
                    img.bakery = models.Bakery.objects.get(name=name_text)
                    img.photo = f"bakery/bread_imgs/{random_names[index]}.jpg"
                    img.save()

                for index, menu in enumerate(menus_list):
                    m = models.Menu()
                    m.bakery = models.Bakery.objects.get(name=name_text)
                    m.name = menu[0]
                    try:
                        m.row_price = menu[1]
                    except:
                        pass
                    m.save()

            urls = []
            random_names = []
            driver.close()
            driver.switch_to_window(driver.window_handles[0])
        except NoSuchElementException:
            a.send_keys(Keys.PAGE_DOWN)
            links = driver.find_elements_by_css_selector(
                "#info\.search\.place\.list > li")

    more = driver.find_element_by_css_selector("#info\.search\.place\.more")
    more.send_keys(Keys.ENTER)

    time.sleep(3)

    links = driver.find_elements_by_css_selector(
        "#info\.search\.place\.list > li")

    for link in links:
        try:
            a = link.find_element_by_css_selector(
                "div.info_item > div.contact.clickArea > a.moreview")
            a.send_keys(Keys.ENTER)
            time.sleep(1)
            driver.switch_to_window(driver.window_handles[1])
            # 데이터생성 작업시작
            # name 정보수집
            name = driver.find_element_by_css_selector(
                "#mArticle > div.cont_essential > div:nth-child(1) > div.place_details > div > h2"
            )
            name_text = name.text

            # address 정보수집
            try:
                address = driver.find_element_by_css_selector(
                    "#mArticle > div.cont_essential > div.details_placeinfo > div:nth-child(2) > div > span.txt_address"
                )
                address_text = address.text
            except:
                address_text = ""

            # phone_number 정보수집
            try:
                phone = driver.find_element_by_css_selector(
                    "#mArticle > div.cont_essential > div.details_placeinfo > div.placeinfo_default.placeinfo_contact > div > div > span > span.txt_contact"
                )
                phone_text = phone.text
            except:
                phone_text = ""

            try:
                # 영업일 더보기정보 클릭
                date_btn = driver.find_element_by_css_selector(
                    "#mArticle > div.cont_essential > div.details_placeinfo > div:nth-child(3) > div > div.location_present > ul > li > a"
                )
                date_btn.send_keys(Keys.ENTER)
                # business hour 정보수집
                business_hours = driver.find_element_by_css_selector(
                    "#mArticle > div.cont_essential > div.details_placeinfo > div:nth-child(3) > div > div.fold_floor > div > ul:nth-child(2)"
                )
                business_hours_text = business_hours.text
                # 뜬 창 닫기
                close_btn = driver.find_element_by_css_selector(
                    "#mArticle > div.cont_essential > div.details_placeinfo > div:nth-child(3) > div > div.fold_floor > div > a"
                )
                close_btn.send_keys(Keys.ENTER)
            except NoSuchElementException:
                try:
                    business_hours = driver.find_element_by_css_selector(
                        "#mArticle > div.cont_essential > div.details_placeinfo > div:nth-child(3) > div > div > ul > li > span"
                    )
                    business_hours_text = business_hours.text
                except NoSuchElementException:
                    business_hours_text = ""

            # 스크롤 내리기
            body = driver.find_element_by_css_selector("body")
            body.send_keys(Keys.PAGE_DOWN)

            # sub_name 데이터 수집
            try:
                sub_name = driver.find_element_by_css_selector(
                    "#mArticle > div.cont_essential > div.details_placeinfo > div.placeinfo_default.open_on > div > p"
                )
                sub_name_text = sub_name.text
            except NoSuchElementException:
                sub_name_text = ""

            # menus_list 데이터 수집
            menus = driver.find_elements_by_css_selector("ul.list_menu > li")
            menus_list = []
            for menu in menus:
                if menu.find_element_by_css_selector(
                        "div span.loss_word").text == "":
                    break
                add = []
                add.append(
                    menu.find_element_by_css_selector(
                        "div span.loss_word").text)
                try:
                    add.append(
                        int(
                            menu.find_element_by_css_selector(
                                "div em.price_menu").text.replace(",", "")))
                except:
                    pass
                menus_list.append(add)

            # 사진 데이터 수집
            try:
                photo_button = driver.find_element_by_css_selector(
                    "#mArticle > div.cont_photo > div.photo_area > ul > li.size_l > a"
                )
                action = ActionChains(driver)
                action.move_to_element(photo_button).perform()
                photo_button.send_keys(Keys.ENTER)
                urls = []
                time.sleep(2)
                imgs = driver.find_elements_by_css_selector(
                    "ul.list_phtoview > li")
                for index, img in enumerate(imgs):
                    if index == 3:
                        break
                    link = img.find_element_by_css_selector("a")
                    link.send_keys(Keys.ENTER)
                    time.sleep(1)
                    real_link = driver.find_element_by_css_selector(
                        "#photoViewer > div.layer_body > div.view_photo > div.view_image > img"
                    )
                    urls.append(real_link.get_attribute("src"))
                time.sleep(3)
                chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890"
                random_names = []
                for name in range(len(urls)):
                    random_names.append("".join(
                        (random.choice(chars)) for x in range(10)))
                for index, url in enumerate(urls):
                    # urlretrieve는 다운로드 함수
                    urllib.request.urlretrieve(
                        url,
                        os.path.join(
                            BASE_DIR,
                            f"uploads/bakery/bread_imgs/{random_names[index]}.jpg",
                        ),
                    )
            except:
                pass

            # lat,lng 정보수집
            driver.get(
                f"https://www.google.co.kr/maps/@37.053745,125.6553969,5z?hl=ko"
            )

            google_search_box = driver.find_element_by_css_selector(
                "#searchboxinput")
            google_search_box.send_keys(name_text)
            google_search_box.send_keys(Keys.ENTER)

            time.sleep(3)

            try:
                # 검색했는데 바로 상세로 안가고 목록으로 가면 가장 첫번째 목록 클릭
                go_to = driver.find_element_by_css_selector(
                    "#pane > div > div.widget-pane-content.scrollable-y > div > div > div.section-layout.section-scrollbox.scrollable-y.scrollable-show.section-layout-flex-vertical > div.section-layout.section-scrollbox.scrollable-y.scrollable-show.section-layout-flex-vertical > div:nth-child(1) > div.section-result-content > div.section-result-text-content"
                )
                go_to.send_keys(Keys.ENTER)

                time.sleep(3)

                lat_text = float(
                    driver.current_url.split("@")[1].split(",")[0])
                lng_text = float(
                    driver.current_url.split("@")[1].split(",")[1])

            except:
                # 목록이 안뜰경우
                try:
                    # 상세로 간 경우
                    ex = driver.find_element_by_css_selector(
                        "#pane > div > div.widget-pane-content.scrollable-y > div > div > div.section-hero-header-title > div.section-hero-header-title-top-container > div.section-hero-header-title-description > div:nth-child(1) > h1 > span:nth-child(1)"
                    )
                    lat_text = float(
                        driver.current_url.split("@")[1].split(",")[0])
                    lng_text = float(
                        driver.current_url.split("@")[1].split(",")[1])
                except:
                    # 검색결과를 찾지 못한경우
                    lat_text = 0
                    lng_text = 0

            # print(
            #     name_text,
            #     sub_name_text,
            #     address_text,
            #     business_hours_text,
            #     lat_text,
            #     lng_text,
            #     phone_text,
            #     menus_list,
            # )
            try:
                bakery = models.Bakery.objects.get(name=name_text)
            except:
                models.Bakery.objects.create(
                    name=name_text,
                    sub_name=sub_name_text,
                    lat=lat_text,
                    lng=lng_text,
                    address=address_text,
                    phone_number=phone_text,
                    business_hour=business_hours_text,
                    city=local,
                )
                for index, url in enumerate(urls):
                    img = models.Photo()
                    img.bakery = models.Bakery.objects.get(name=name_text)
                    img.photo = f"bakery/bread_imgs/{random_names[index]}.jpg"
                    img.save()

                for index, menu in enumerate(menus_list):
                    m = models.Menu()
                    m.bakery = models.Bakery.objects.get(name=name_text)
                    m.name = menu[0]
                    try:
                        m.row_price = menu[1]
                    except:
                        pass
                    m.save()

            urls = []
            random_names = []
            driver.close()
            driver.switch_to_window(driver.window_handles[0])
        except NoSuchElementException:
            a.send_keys(Keys.PAGE_DOWN)
            links = driver.find_elements_by_css_selector(
                "#info\.search\.place\.list > li")
    # # 2바퀴돌고 끝내기
    # return

    page_3 = driver.find_element_by_css_selector("#info\.search\.page\.no3")
    page_3.send_keys(Keys.ENTER)

    time.sleep(3)

    links = driver.find_elements_by_css_selector(
        "#info\.search\.place\.list > li")

    for link in links:
        try:
            a = link.find_element_by_css_selector(
                "div.info_item > div.contact.clickArea > a.moreview")
            a.send_keys(Keys.ENTER)
            time.sleep(1)
            driver.switch_to_window(driver.window_handles[1])
            # 데이터생성 작업시작
            # name 정보수집
            name = driver.find_element_by_css_selector(
                "#mArticle > div.cont_essential > div:nth-child(1) > div.place_details > div > h2"
            )
            name_text = name.text

            # address 정보수집
            try:
                address = driver.find_element_by_css_selector(
                    "#mArticle > div.cont_essential > div.details_placeinfo > div:nth-child(2) > div > span.txt_address"
                )
                address_text = address.text
            except:
                address_text = ""

            # phone_number 정보수집
            try:
                phone = driver.find_element_by_css_selector(
                    "#mArticle > div.cont_essential > div.details_placeinfo > div.placeinfo_default.placeinfo_contact > div > div > span > span.txt_contact"
                )
                phone_text = phone.text
            except:
                phone_text = ""

            try:
                # 영업일 더보기정보 클릭
                date_btn = driver.find_element_by_css_selector(
                    "#mArticle > div.cont_essential > div.details_placeinfo > div:nth-child(3) > div > div.location_present > ul > li > a"
                )
                date_btn.send_keys(Keys.ENTER)
                # business hour 정보수집
                business_hours = driver.find_element_by_css_selector(
                    "#mArticle > div.cont_essential > div.details_placeinfo > div:nth-child(3) > div > div.fold_floor > div > ul:nth-child(2)"
                )
                business_hours_text = business_hours.text
                # 뜬 창 닫기
                close_btn = driver.find_element_by_css_selector(
                    "#mArticle > div.cont_essential > div.details_placeinfo > div:nth-child(3) > div > div.fold_floor > div > a"
                )
                close_btn.send_keys(Keys.ENTER)
            except NoSuchElementException:
                try:
                    business_hours = driver.find_element_by_css_selector(
                        "#mArticle > div.cont_essential > div.details_placeinfo > div:nth-child(3) > div > div > ul > li > span"
                    )
                    business_hours_text = business_hours.text
                except NoSuchElementException:
                    business_hours_text = ""

            # 스크롤 내리기
            body = driver.find_element_by_css_selector("body")
            body.send_keys(Keys.PAGE_DOWN)

            # sub_name 데이터 수집
            try:
                sub_name = driver.find_element_by_css_selector(
                    "#mArticle > div.cont_essential > div.details_placeinfo > div.placeinfo_default.open_on > div > p"
                )
                sub_name_text = sub_name.text
            except NoSuchElementException:
                sub_name_text = ""

            # menus_list 데이터 수집
            menus = driver.find_elements_by_css_selector("ul.list_menu > li")
            menus_list = []
            for menu in menus:
                if menu.find_element_by_css_selector(
                        "div span.loss_word").text == "":
                    break
                add = []
                add.append(
                    menu.find_element_by_css_selector(
                        "div span.loss_word").text)
                try:
                    add.append(
                        int(
                            menu.find_element_by_css_selector(
                                "div em.price_menu").text.replace(",", "")))
                except:
                    pass
                menus_list.append(add)

            # 사진 데이터 수집
            try:
                photo_button = driver.find_element_by_css_selector(
                    "#mArticle > div.cont_photo > div.photo_area > ul > li.size_l > a"
                )
                action = ActionChains(driver)
                action.move_to_element(photo_button).perform()
                photo_button.send_keys(Keys.ENTER)
                urls = []
                time.sleep(2)
                imgs = driver.find_elements_by_css_selector(
                    "ul.list_phtoview > li")
                for index, img in enumerate(imgs):
                    if index == 3:
                        break
                    link = img.find_element_by_css_selector("a")
                    link.send_keys(Keys.ENTER)
                    time.sleep(1)
                    real_link = driver.find_element_by_css_selector(
                        "#photoViewer > div.layer_body > div.view_photo > div.view_image > img"
                    )
                    urls.append(real_link.get_attribute("src"))
                time.sleep(3)
                chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890"
                random_names = []
                for name in range(len(urls)):
                    random_names.append("".join(
                        (random.choice(chars)) for x in range(10)))
                for index, url in enumerate(urls):
                    # urlretrieve는 다운로드 함수
                    urllib.request.urlretrieve(
                        url,
                        os.path.join(
                            BASE_DIR,
                            f"uploads/bakery/bread_imgs/{random_names[index]}.jpg",
                        ),
                    )
            except:
                pass

            # lat,lng 정보수집
            driver.get(
                f"https://www.google.co.kr/maps/@37.053745,125.6553969,5z?hl=ko"
            )

            google_search_box = driver.find_element_by_css_selector(
                "#searchboxinput")
            google_search_box.send_keys(name_text)
            google_search_box.send_keys(Keys.ENTER)

            time.sleep(3)

            try:
                # 검색했는데 바로 상세로 안가고 목록으로 가면 가장 첫번째 목록 클릭
                go_to = driver.find_element_by_css_selector(
                    "#pane > div > div.widget-pane-content.scrollable-y > div > div > div.section-layout.section-scrollbox.scrollable-y.scrollable-show.section-layout-flex-vertical > div.section-layout.section-scrollbox.scrollable-y.scrollable-show.section-layout-flex-vertical > div:nth-child(1) > div.section-result-content > div.section-result-text-content"
                )
                go_to.send_keys(Keys.ENTER)

                time.sleep(3)

                lat_text = float(
                    driver.current_url.split("@")[1].split(",")[0])
                lng_text = float(
                    driver.current_url.split("@")[1].split(",")[1])

            except:
                # 목록이 안뜰경우
                try:
                    # 상세로 간 경우
                    ex = driver.find_element_by_css_selector(
                        "#pane > div > div.widget-pane-content.scrollable-y > div > div > div.section-hero-header-title > div.section-hero-header-title-top-container > div.section-hero-header-title-description > div:nth-child(1) > h1 > span:nth-child(1)"
                    )
                    lat_text = float(
                        driver.current_url.split("@")[1].split(",")[0])
                    lng_text = float(
                        driver.current_url.split("@")[1].split(",")[1])
                except:
                    # 검색결과를 찾지 못한경우
                    lat_text = 0
                    lng_text = 0

            # print(
            #     name_text,
            #     sub_name_text,
            #     address_text,
            #     business_hours_text,
            #     lat_text,
            #     lng_text,
            #     phone_text,
            #     menus_list,
            # )
            try:
                bakery = models.Bakery.objects.get(name=name_text)
            except:
                models.Bakery.objects.create(
                    name=name_text,
                    sub_name=sub_name_text,
                    lat=lat_text,
                    lng=lng_text,
                    address=address_text,
                    phone_number=phone_text,
                    business_hour=business_hours_text,
                    city=local,
                )
                for index, url in enumerate(urls):
                    img = models.Photo()
                    img.bakery = models.Bakery.objects.get(name=name_text)
                    img.photo = f"bakery/bread_imgs/{random_names[index]}.jpg"
                    img.save()

                for index, menu in enumerate(menus_list):
                    m = models.Menu()
                    m.bakery = models.Bakery.objects.get(name=name_text)
                    m.name = menu[0]
                    try:
                        m.row_price = menu[1]
                    except:
                        pass
                    m.save()

            urls = []
            random_names = []
            driver.close()
            driver.switch_to_window(driver.window_handles[0])
        except NoSuchElementException:
            a.send_keys(Keys.PAGE_DOWN)
            links = driver.find_elements_by_css_selector(
                "#info\.search\.place\.list > li")
Example #60
0
 def mousehover(self,locator,moveto):
     weblocator = self.locator.split('=')
     if weblocator[0] == "XPath":
         self.retlocator = self.driver.find_elements_by_xpath(weblocator[1])
         hover = ActionChains(self.driver)
         hover.move_to_element(self.retlocator).perform()