selenium常见难点解决方案

勾选框勾选问题

勾选框代码逻辑实现过程:
第一步:首先找到勾选框的元素;
第二步:检查它是否已经被勾选。如果已经勾选,则进行取消勾选操作;如果未勾选,则进行点击勾选操作;
以下是一个示例代码,演示了如何在 Selenium 中实现这一逻辑:

#加上等待操作
checkbox = WebDriverWait(driver, 15).until(EC.element_to_be_clickable((By.XPATH, '//*[@id="app"]/div[1]/div[2]/div/div/div[2]/div/div[2]/div/div[2]/div[2]/div/div/div[5]/div[1]/label')))
is_checked = "is-checked" in checkbox.get_attribute("class")
if is_checked:
    print("不勾选")
else:
    # 如果未勾选,则进行点击勾选操作
    checkbox3.click()
    print("勾选")
#勾选代码简化操作:
checkbox.click() if not is_checked else None

在这个示例中,我们首先找到了勾选框的元素,然后通过检查它的 class 属性来确定是否已经被勾选。如果已经勾选,则执行取消勾选操作;如果未勾选,则执行点击勾选操作。

存在多个勾选框的问题

#以下是对多个勾选框的简单封装过程,仅供参考:
    def WebDriverWaitOperaton(self, checkparams):
         """
        等待时间封装
        :param checkparams: 
        :return: 
        """
        return WebDriverWait(self.driver, 15).until(EC.element_to_be_clickable((By.XPATH, checkparams)))

    def operationChoose(self):
        """
        操作多个勾选框
        :return:
        """
        #勾选框操作
        checkboxes = ["checkbox", "checkbox1", "checkbox2", "checkbox3"] #将多个勾选框统一命名
        #循环遍历
        for checkbox_name in checkboxes:
            self.checkbox = self.WebDriverWaitOperaton(self.fd.get_plateform_text(checkbox_name))
            is_checked = "is-checked" in self.checkbox.get_attribute("class")
            self.checkbox.click() if not is_checked else None

self.fd.get_plateform_text(checkbox_name) 
是获取到对应元素定位信息具体看每个人的封装是如何,可以简单的附上自己用的代码过程仅供参考:
    def get_plateform_text(self, key):
        read_ini = ReadIni(file_name="../config/PlateformRegisterElement.ini")
        data = read_ini.get_value(key)
        # 获取到readini指定的格式的值如:id>register_nickname
        # 使用split拆分值,以>为分隔符,左侧为定位方式,右侧为页面元素信息
        by = data.split('>')[0]
        value = data.split('>')[1]
        self.logger.info("定位方式:" + by + "--->定位值:" + value)
        try:
            if by == 'id':
                return value
            elif by == 'name':
                return value
            elif by == 'className':
                return value
            else:
                return value
        except:
            return None

调试产生的多个chromedriver

UI自动化调试期间会有很多打开的浏览窗口和CMD窗口。
目前比较好的解决方案是使用浏览器端口复用或者采用直接kil的方法:

import os

os.system('taskkill /im chrome.exe /F')  # 关闭所有谷歌浏览驱动
os.system('taskkill /im chromedriver.exe /F')  # 关闭所有谷歌浏览器驱动
os.system('taskkill /im conhost.exe /F')  # 关闭所有cmd小黑窗加上几行代码:

悬浮窗口解决方案

第一步:悬浮窗口一般是先移动到悬浮窗口位置;
第二步:等待悬浮窗口元素出现,出现后点击对应的悬浮菜单;
第三步:使用hover方法对元素进行操作,具体代码如下:

# 定位到要悬停的元素
hover_element = driver.find_element_by_xpath('移动到悬浮位置')
actions = ActionChains(driver)
actions.move_to_element(hover_element).perform()
# 悬停操作后的操作,例如点击悬停后出现的菜单项
hover_element.find_element_by_xpath('待点击的元素定位信息').click()

搜索窗口点击指定元素:

一般搜索窗口会有模糊查询的内容:
第一步:先定位到搜索框;
第二步:输入指定的要搜索的元素名称;
第三步:使用execute_script()对元素进行点击操作


company_name = "哈尔滨华南城有限公司"
jg_name = driver.find_element_by_xpath('//*[@id="app"]/div[1]/div[2]/div/div/div[1]/div[2]/form/div[2]/div[1]/div[1]/div/div[1]/div/input').send_keys(company_name)
wait = WebDriverWait(driver, 10)
target_element = wait.until(EC.visibility_of_element_located((By.XPATH, f"//ul[contains(@class, 'el-autocomplete-suggestion__list')]//li[contains(text(), '{company_name}')]")))
# 使用JavaScript执行点击操作
driver.execute_script("arguments[0].click();", target_element)

搜索窗口点击指定元素示意图:
在这里插入图片描述

  • 8
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值