Selenium点击悬浮菜单及实现鼠标右键等功能

00 

    因项目实现,菜单点击后悬浮子菜单点击,研究实现。


01 

    页面效果:

    

    下面菜单元素在源码中有,但不点击父菜单时不显示,所以代码直接点击元素会报找不到。

02 

    调试在Firefox上进行。找到方法 ActionChains,这是一个组合操作方法,可以实现鼠标的双击、滑动、右键等功能。

    当前Firefox版本为51,结果调试出错,geockdriver驱动的已知Bug,不支持ActionChains。升级Firefox版本或更改浏览器为Chrome等即可。

03 

    实现的代码:

    

# -*- coding:utf8 -*-

import unittest,time
from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.action_chains import ActionChains as AC
from selenium.webdriver.common.by import By
from selenium.webdriver.support.select import Select

now_handle = ''

class CreateDTSettings(unittest.TestCase):
    @classmethod
    def setUpClass(cls):
        cls.driver = webdriver.Firefox()
        # cls.driver = webdriver.Chrome()
        urls = "http://192.168.25.105/T03/FIC5"
        cls.driver.get(urls)
        cls.driver.maximize_window()

        # 登录
        cls.driver.find_element_by_id("textEmail").clear()
        cls.driver.find_element_by_id("textEmail").send_keys("admin")

        cls.driver.find_element_by_id("textPassword").send_keys("admin")
        time.sleep(1)

        cls.driver.find_element_by_id("btnLogin").click()
        time.sleep(5)

        cls.driver.implicitly_wait(60)

    @classmethod
    def tearDownClass(cls):
        cls.driver.quit()

    def testdtSettings(self):
        u'''登录,点击打开系统设置'''
        globals()['now_handle'] = self.driver.current_window_handle
        print(now_handle)

        ''' #
        # 方法一:点击 大图标
        fm = self.driver.find_element_by_xpath(".//*[@id='host_header']/div[3]")
        AC(self.driver).click(fm).perform()  # 此方法须在Firefox高版本上才兼容(当前版本为62)
        time.sleep(5)
        self.driver.find_element_by_xpath(".//*[@id='ul_menu_modules']/li[3]/a").click()
        time.sleep(3)
        ''' #

        # '''
        # 方法二:右键菜单
        rmenu = self.driver.find_element_by_xpath(".//*[@id='content']/div[2]")
        AC(self.driver).context_click(rmenu).perform()
        time.sleep(2)
        self.driver.find_element_by_xpath(".//*[@id='chartMenu']/ul/li[1]").click()
        time.sleep(2)
        # '''

        '''
        # 方法三:从Home页点击大图标
        # 点击 Logo图标到Home页
        self.driver.find_element_by_xpath(".//*[@id='home_logo_a']/img").click()
        time.sleep(2)
        # 点击 系统设置
        self.driver.find_element_by_xpath(".//*[@id='ul_modules']/li[3]/a/div[1]").click()
        time.sleep(3)
        '''

        # 跳转到系统设置页
        self.driver.switch_to.window(self.driver.window_handles[1])
        time.sleep(3)
        WebDriverWait(self.driver, 20, 0.5).until(EC.presence_of_element_located((By.XPATH, ".//*[@id='productBar']/span")))
        self.driver.find_element_by_xpath(".//*[@class='child']/tbody/tr[4]/td[2]/div").click()
        time.sleep(5)
        self.driver.find_element_by_xpath(".//*[@class='child']/tbody/tr[2]/td[2]/div").click()
        time.sleep(2)

        self.driver.switch_to.frame("MainContent")
        # 点击 添加 DT
        # self.driver.find_element_by_id("DTName").send_keys("30")
        # self.driver.find_element_by_id("btView").click()
        time.sleep(5)
        self.driver.find_element_by_xpath(".//*[@id='btAdd']").click()
        time.sleep(2)

        # 弹出DT向导
        self.driver.switch_to.default_content()    # 此代码跳转到最新活动界面(上层页面)
        time.sleep(2)
        self.driver.find_element_by_id("radio_type_Composition").click()
        self.driver.find_element_by_name("nextButton").click()
        time.sleep(3)


if __name__ == "__main__":
    unittest.main()


    代码中的三种方式都已实现。

猜你喜欢

转载自blog.csdn.net/zljun8210/article/details/81013065