自动化测试-遍历循环组织机构树+其他控件

这个项目的定位只能用JS(Xfullpath),用其他定位方法并不好用

原因是其他定位方法都含有id,而这个id是变化的,所以只能用fullpath,甚至xpath都有动态id

这里先记录下JS(Xfullpath),很好用,在循环方面

ele = driver.find_element_by_xpath('/html/body/div[1]/div/div[2]/div[2]/div/div[1]/div/div[2]/div/div[1]/div/div[1]/div[2]/div['+str(item_dept)+']/div/div/i')
        driver.execute_script('arguments[0].click();',ele)

组织机构树的循环:

界面是这样的:需要分别点击法院、部门、部门里的人员

要注意最后一个for循环,这里用了两个变量是因为,这个层级很多,需要两个同时定位,第几个部门+第几个人员,这样才能定位到。

不然会变成 同一个部门的人员反复的点击

总结:

层级多的循环,先从大到小点击,再把大的展开,再定位最小的

从这个来说 就是先点法院、再点部门、再展开部门,找每个元素之前的规律,看看怎么能拼接上定位参数循环。

def tree():
    #点击部门
    eles=driver.find_elements_by_css_selector('.text > .halo-icon')
    print("部门数量:",len(eles))
    dlen=len(eles)
    for item_dept in range(1,dlen):
        ele = driver.find_element_by_xpath('/html/body/div[1]/div/div[2]/div[2]/div/div[1]/div/div[2]/div/div[1]/div/div[1]/div[2]/div['+str(item_dept)+']/div/div/i')
        driver.execute_script('arguments[0].click();',ele)
        plan_dept()
        time.sleep(0.5)
        #展开部门
        ele=driver.find_element_by_xpath('/html/body/div[1]/div/div[2]/div[2]/div/div[1]/div/div[2]/div/div[1]/div/div[1]/div[2]/div['+str(item_dept)+']/div[1]/span')
        driver.execute_script('arguments[0].click();', ele)
        time.sleep(0.5)
        #点击人员
        eles_user=driver.find_elements_by_css_selector('.el-tree-node__content >.text >.halo-icon-人员')
        print("人员数量",len(eles_user))
        ulen=len(eles_user)
        for item_user in range(1,ulen):
            try:
                ele=driver.find_element_by_xpath('/html/body/div[1]/div/div[2]/div[2]/div/div[1]/div/div[2]/div/div[1]/div/div[1]/div[2]/div['+str(item_dept)+']/div[2]/div['+str(item_user)+']/div')
                driver.execute_script('arguments[0].click();', ele)
                time.sleep(0.5)
                print(item_dept, item_user)
                time.sleep(0.8)
                plan_user()
            except NoSuchElementException:
                print('没有该元素')
                break

 以下是完整代码

from selenium import webdriver
import time
from selenium.common.exceptions import NoSuchElementException

def login():

    driver.implicitly_wait(10)
    first_url='http://172.18.19.152:8099/jxglpt/form/e4a6a5ad900f10b5d7ea6238bb9a3a6f/insert?primaryMenuKey=jxglpt.bayj'
    driver.get(first_url)
    driver.find_element_by_id('username1').send_keys('test16036')
    driver.find_element_by_id('password1').send_keys('6789@jkl')
    driver.find_element_by_xpath('//*[@id="fm1"]/div/div[1]/div/div/div[2]/div[4]/a').click()
    time.sleep(0.5)
    sec_url='http://172.18.19.152:8099/jxglpt/form/e4a6a5ad900f10b5d7ea6238bb9a3a6f/insert?primaryMenuKey=jxglpt.bayj'
    driver.get(sec_url)
    time.sleep(0.5)

    #并点击到工作量评估--在iframe里需要切换进入
    driver.switch_to.frame("jqIframea6116_iframe")
    driver.find_element_by_xpath('//*[@id="jqHtmlArea70dc2"]/div/div/div[3]/div[1]').click()
    driver.find_element_by_xpath('//*[@id="jqHtmlArea70dc2"]/div/div/div[3]/div[2]/div[1]').click()
    time.sleep(3)
    #循环左侧组织架构图,上一步进入了iframe里,现在需要跳出来
    driver.switch_to.default_content()
    #依次点开下级节点图标
def tree():
    #点击部门
    eles=driver.find_elements_by_css_selector('.text > .halo-icon')
    print("部门数量:",len(eles))
    dlen=len(eles)
    for item_dept in range(1,dlen):
        ele = driver.find_element_by_xpath('/html/body/div[1]/div/div[2]/div[2]/div/div[1]/div/div[2]/div/div[1]/div/div[1]/div[2]/div['+str(item_dept)+']/div/div/i')
        driver.execute_script('arguments[0].click();',ele)
        plan_dept()
        time.sleep(0.5)
        #展开部门
        ele=driver.find_element_by_xpath('/html/body/div[1]/div/div[2]/div[2]/div/div[1]/div/div[2]/div/div[1]/div/div[1]/div[2]/div['+str(item_dept)+']/div[1]/span')
        driver.execute_script('arguments[0].click();', ele)
        time.sleep(0.5)
        #点击人员
        eles_user=driver.find_elements_by_css_selector('.el-tree-node__content >.text >.halo-icon-人员')
        print("人员数量",len(eles_user))
        ulen=len(eles_user)
        for item_user in range(1,ulen):
            try:
                #这里用了两个变量是因为,这个层级很多,需要两个同时定位,第几个部门+第几个人员,这样才能定位到。
                ele=driver.find_element_by_xpath('/html/body/div[1]/div/div[2]/div[2]/div/div[1]/div/div[2]/div/div[1]/div/div[1]/div[2]/div['+str(item_dept)+']/div[2]/div['+str(item_user)+']/div')
                driver.execute_script('arguments[0].click();', ele)
                time.sleep(0.5)
                print(item_dept, item_user)
                time.sleep(0.8)
                plan_user()
            except NoSuchElementException:
                print('没有该元素')
                break

#组织机构循环 无果,实验下一循环,工作量计划。获取点击工作量计划下拉框
def plan_dept():
    js='document.querySelector("body > div:nth-child(2) > div > div.context.flex > div.layout-context--right.auto > div > div.estimate-content > div.estimate-content-body > div.el-card.is-always-shadow.pe-card > div > div > form > div:nth-child(1) > div > div > div > input").click()'
    driver.execute_script(js)
    time.sleep(1)
    eles=driver.find_elements_by_css_selector('.el-scrollbar__view>.el-select-dropdown__item')
    print(len(eles))
    xlen=len(eles)
    for item in range(1,xlen+1):
        js = 'document.querySelector("body > div.el-select-dropdown.el-popper > div.el-scrollbar > div.el-select-dropdown__wrap.el-scrollbar__wrap.el-scrollbar__wrap--hidden-default > ul > li:nth-child('+str(item)+')").click()'
        driver.execute_script(js)
        time.sleep(1)
        radio()

def plan_user():
    js='document.querySelector("body > div:nth-child(2) > div > div.context.flex > div.layout-context--right.auto > div > div.estimate-content > div.estimate-content-body > div.el-card.is-always-shadow.pe-card > div > div > form > div:nth-child(1) > div > div > div > input").click()'
    driver.execute_script(js)
    time.sleep(1)
    eles=driver.find_elements_by_css_selector('.el-scrollbar__view>.el-select-dropdown__item')
    print(len(eles))
    xlen=len(eles)
    for item in range(1,xlen+1):
        js = 'document.querySelector("body > div.el-select-dropdown.el-popper > div.el-scrollbar > div.el-select-dropdown__wrap.el-scrollbar__wrap.el-scrollbar__wrap--hidden-default > ul > li:nth-child('+str(item)+')").click()'
        driver.execute_script(js)
        time.sleep(1)


#点击日期控件
# js='document.querySelector("body > div:nth-child(2) > div > div.context.flex > div.layout-context--right.auto > div > div.estimate-content > div.estimate-content-body > div.el-card.is-always-shadow.pe-card > div > div > form > span > button").click()'
# driver.execute_script(js)
# time.sleep(1)

# 开始时间赋值
# item=driver.find_element_by_xpath('/html/body/div[2]/div[1]/div/div/input[1]')
# driver.execute_script('arguments[0].removeAttribute("readonly")',item)
# item.clear()
# item.send_keys('2021-03-14')
# #结束时间赋值
# item=driver.find_element_by_xpath('/html/body/div[2]/div[1]/div/div/input[2]')
# driver.execute_script('arguments[0].removeAttribute("readonly")',item)
# item.clear()
# item.send_keys('2021-03-19')
# item.send_keys(Keys.ENTER)#加上回车键
# time.sleep(0.5)

# 单选控件赋值
def radio():
    eles=driver.find_elements_by_css_selector('.el-radio-group >.el-radio')
    xlen=len(eles)
    print(xlen)
    for item in range(1,5):
        js='document.querySelector("body > div:nth-child(2) > div > div.context.flex > div.layout-context--right.auto > div > div.estimate-content > div.estimate-content-body > div.el-card.is-always-shadow.pe-card > div > div > form > div:nth-child(3) > div > div > label:nth-child('+str(item)+') > span.el-radio__input > input").click()'
        driver.execute_script(js)
        time.sleep(0.5)

if __name__ == '__main__':
    driver = webdriver.Chrome()
    driver.maximize_window()
    login()
    tree()

猜你喜欢

转载自blog.csdn.net/honghong3864/article/details/114891941