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()
代码中的三种方式都已实现。