【selenium】遍历双下拉框元素,对每一种组合进行点击操作

先给出我要遍历的下拉框的样式
在这里插入图片描述
每一个cluster对应多个workspace,所以需要对两个下拉框同时进行遍历
代码如下

    #找到下拉框元素
    clBtn = driver.find_element_by_xpath(
        "//div[@id='root']/div[@class='App blue']/section[@class='ant-layout']/main/div[@class='ant-row pr-20']/div[2]/div[@class='ant-col ant-col-sm-24']/div[2]/div[@class='ant-col ant-col-sm-24']/div[@class='ant-row']/div[1]/div[@class='ant-row']/div")
    #点击下拉框元素
    clBtn.click()
    #获取下拉框列表
    clList = driver.find_elements_by_xpath("/html/body/div[2]/div/div/div/div[@class='']/div/div[@class='']/div")
    #遍历下拉框列表
    for cl in clList:
        #每次点击下拉框列表里面一个元素之前,要先点击下拉框元素,让下拉列表出现
        clBtn.click()
        #点击下拉框列表中的某一个元素(为什么使用这种方式进行点击,可参考https://www.cnblogs.com/yoyoma0355/p/9263227.html)
        driver.execute_script("(arguments[0]).click()", cl)
        #cl.click()

        #下面的代码是需要循环遍历另一个下拉框,代码类似
        wsBtn = driver.find_element_by_xpath(
            "//div[@id='root']/div[@class='App blue']/section[@class='ant-layout']/main/div[@class='ant-row pr-20']/div[2]/div[@class='ant-col ant-col-sm-24']/div[2]/div[@class='ant-col ant-col-sm-24']/div[@class='ant-row']/div[2]/div[@class='ant-row']/div")
        wsBtn.click()
        list = driver.find_elements_by_xpath('//div[@role="listbox"]')
        wsList = list[len(list) - 1].find_elements_by_xpath('../div[2]/div/div/div')
        print("wslist len is ", len(wsList))
        for ws in wsList:
            wsBtn.click()
            driver.execute_script("arguments[0].click();", ws)
            #ws.click()
            time.sleep(2)
    driver.quit()

由于现在很多的UI框架导致,下拉框的类型并不是select,而是许多div嵌套的格式,所以在寻找元素的时候,很常用的方式应该是xpath或者css。而且有些情况,某个元素对应的位置,在操作几次之后,就会发生变化,所以之前定位的位置并不是现在真实的位置,程序往往就会卡住。解决这种问题的办法就是要去寻找一个不会变的xpath路径,或者css路径,比如这个节点的父节点不会变,则可以去找他的父节点,再通过父节点找到需要的子节点,也可能是他的兄弟节点不会变,那也可以通过兄弟节点去找,就是这种类似的思想,实际需要不同问题寻找不同的方法,这里讲一个例子,就是上面的例子,帮大家加深这种理解。

在这里插入图片描述
如上图所示,蓝色框为需要定位的列表,经过观察,需要定位的这个列表始终有一个先辈节点div[@role=“listbox”],但这个页面总共有两个div[@role=“listbox”],而且需要定位的列表始终位于最后一个div[@role=“listbox”]下,所以定位的方式如下:

       #首先找到所有div[@role="listbox"]节点,得到一个list
       list = driver.find_elements_by_xpath('//div[@role="listbox"]')
       #然后取list的最后一个元素,再通过父节点定位到列表本身
       wsList = list[len(list) - 1].find_elements_by_xpath('../div[2]/div/div/div')
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值