Python selenium定位动态下拉框

Python selenium定位动态下拉框

1、下拉框元素需要点击控件才展示
在这里插入图片描述在这里插入图片描述

这里可以使用XPAN定位到下拉框,使用driver.find_element(By.XPATH,“路径”).click()进行点击

2、定位到下拉框里的筛选项元素,每次滚动都会变化
在这里插入图片描述在这里插入图片描述
这里的内容要用XPAN定位到//div[@class=“rc-virtual-list-holder-inner”]
然后使用 鼠标滚动的方式,去获取所有的元素名称
方法:

    def get_text(self,loc, page_name_action,all=False):
        # 等待元素可见并获取元素对象
        ele = self.wait_ele_visible_and_return_ele(loc, page_name_action,all)
        try:
            if isinstance(ele,list):
                value =[]
                for i in ele:
                    if len(i.text)==0:
                        continue
                    else:
                        value.append(i.text)
                my_log.info("获取所有的元素:{} 的文本值。获取结果为:{}".format(loc, value))
            else:
                value = ele.text
                my_log.info("获取元素:{} 的文本值。获取结果为:{}".format(loc, value))
            return value
        except:
            # 失败截图,异常详情写入日志,抛出异常
            my_log.exception("获取元素失败!")
            # 失败截图 - 页面名字_行为名字_当前时间.png
            self.save_page_shot(page_name_action)
            raise


    def mouse_move(self,loc,page_name_action):
        try:
            ele = self.wait_ele_visible_and_return_ele(loc, page_name_action) #等待元素出现
            ActionChains(self.driver).move_to_element(ele).perform()  #移动鼠标到该元素上
            my_log.info('移动鼠标到元素:{}'.format(loc))
            return ele
        except:
            my_log.exception('移动鼠标失败')
            self.save_page_shot(page_name_action)
            raise

    def scroll_into_view(self,loc,page_name_action):
        try:
            ele = self.mouse_move(loc,page_name_action)  #调用移动鼠标的方法
            self.driver.execute_script('arguments[0].scrollIntoView(true);', ele) #执行滑动滚动条的操作
            my_log.info(page_name_action)
        except:
            my_log.exception('滚动失败')
            self.save_page_shot(page_name_action)
            raise

    def get_all_select_text(self,loc,page_name_action):
        try:
            before_roll_list = self.get_text(loc, page_name_action, True)[0].split('\n')  #获取当前展示的所有的筛选项名称
            last_loc = (By.XPATH, '//div[text()="{}"]'.format(before_roll_list[-1]))   #获取当前展示的最后一个筛选项元素
            self.scroll_into_view(last_loc,'将筛选项{}滚到顶部'.format(before_roll_list[-1])) #调用滑动滚动条的方法
            after_roll_list = self.get_text(loc, page_name_action, True)[0].split('\n') #获取滑动后所有的筛选项名称
            device_type_text = after_roll_list + before_roll_list   #将两个列表组合成一个新的列表
            if after_roll_list[-1] == before_roll_list[-1]: #判断是否已经滑动到最低端
                my_log.info('“{}”已经是最后一个筛选项'.format(after_roll_list[-1]))
                return list(set(device_type_text))
            else:
                my_log.info('================获取滚动前后的数据================') 
                return list(set(device_type_text + self.get_all_select_text(loc,page_name_action)))
        except:
            my_log.exception('获取元素失败!')
            self.save_page_shot(page_name_action)
            raise
  • 5
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值