selenium---条件选择勾选框

本文介绍了一个自动化测试案例,演示了如何通过遍历元素列表并匹配指定条件来实现页面上复选框的选择操作。具体步骤包括切换iframe,填写表单信息,获取设备使用人信息,并根据特定名称进行筛选,最后根据筛选结果点击相应的复选框。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

测试需求:如下图所示,要求根据设备使用人条件去自动勾选页面左侧的勾选框


首先获取到该页设备使用人和勾选框的元素列表,通过遍历设备使用人元素列表获取设备使用人文本,判断名字,假如text="yanfukun",序号num加入到列表list中。再遍历列表list,通过选择框元素索引去勾选选择框,即可完成上面需求,注意索引取值减一。

代码如下:

for x in range(1,7):
        ms = driver.find_element_by_xpath('//iframe[2]')
        driver.switch_to.frame(ms)
        time.sleep(1)
        driver.find_element_by_xpath('//div/a[contains(@onclick,"新增打印设备")]').click()
        driver.switch_to.default_content()
        time.sleep(1)
        ms1 = driver.find_element_by_xpath('//div[@class="layui-layer-content"]/iframe')
        driver.switch_to.frame(ms1)
        
        driver.find_element_by_xpath('//div[@class="col-sm-7"]/input[@name="device_address"]').clear()
        driver.find_element_by_xpath('//div[@class="col-sm-7"]/input[@name="device_address"]').send_keys('localhost')
        driver.find_element_by_xpath('//div/input[@name="device_port"]').clear()
        driver.find_element_by_xpath('//div/input[@name="device_port"]').send_keys('8000')
        time.sleep(1)
        Select(driver.find_element_by_xpath('//div/select[@name="device_name"]')).select_by_value('Fax')
        time.sleep(1)
        Select(driver.find_element_by_xpath('//select[@name="print_format" and @required]')).select_by_value(str(x))
        driver.find_element_by_xpath('//div[@class="col-sm-7"]/input[@name="printer_name"]').clear()
        driver.find_element_by_xpath('//div[@class="col-sm-7"]/input[@name="printer_name"]').send_keys('yanfukun')
        driver.find_element_by_xpath('//div[@class="col-sm-4 col-sm-offset-5"]/button').click()
        driver.switch_to.default_content()
        time.sleep(4)
        
    ms2 = driver.find_element_by_xpath('//iframe[2]')
    driver.switch_to.frame(ms2)
    # ----------------核心逻辑代码------------------
    elements_1 = driver.find_elements_by_xpath('//tbody[1]/tr/td[5]')
    elements_2 = driver.find_elements_by_xpath('//td/input[@type="checkbox"]')
    #print(elements_2)
    list = []
    num = 1
    
    for x in elements_1:
        text1 = x.text
        #print(text1)
        if text1 == "yanfukun":
            list.append(num)
            num = num + 1
        else:
            num = num + 1
    print(list)
    for y in list:
        #print(y)
        elements_2[y-1].click()
        time.sleep(0.5)
    # ----------------核心逻辑代码------------------
    driver.find_element_by_xpath('//div/a[@onclick="printerObject.delContainerSelect()"]').click()
    driver.switch_to.default_content()
    driver.find_element_by_xpath('//div/a[@class="layui-layer-btn0"]').click()



<think>好的,我现在要解决的问题是关于“输入框和勾选框禁止选用测试点”。首先,我需要明确用户的具体需求是什么。用户可能是在进行软件开发或者测试,特别是用户界面测试,想要确保输入框(input fields)和勾选框checkboxes)在测试过程中不被错误地选中或操作,从而影响测试结果。 接下来,我需要考虑测试点的定义。测试点通常指的是在软件测试中需要验证的具体功能点或场景。禁止选用这些元素作为测试点,可能是因为它们本身属于用户界面组件,而测试的重点应放在业务流程或功能逻辑上,而不是界面元素本身的操作。或者,可能是在自动化测试中避免与这些元素交互,以防止意外的界面操作干扰测试流程。 然后,我需要分析如何实现禁止选用这些测试点。这可能涉及到测试框架或工具的配置,例如在Selenium等自动化测试工具中,可以通过忽略特定的元素类型或属性来排除输入框和勾选框。另一种方法是在编写测试用例时,明确指定不操作这些元素,或者在测试脚本中加入条件判断,跳过对这些元素的处理。 此外,可能还需要考虑测试策略的调整。例如,采用分层测试,将UI测试与业务逻辑测试分离,确保在单元测试或接口测试中不涉及界面元素,从而避免选用输入框和勾选框作为测试点。同时,代码审查和测试用例评审也是重要的环节,确保测试用例的设计符合规范,不包含不必要的界面操作。 还要注意可能的例外情况。例如,如果测试目标本身就是验证输入框或勾选框的功能,如输入验证或勾选状态的变化,那么这些元素自然需要作为测试点。因此,禁止选用可能需要根据具体的测试场景灵活处理,而不是一刀切。 最后,总结出具体的步骤或建议,帮助用户实现禁止选用这些测试点。可能需要结合具体的测试工具和框架,调整测试策略,加强测试用例设计的管理,从而有效避免在测试过程中误用输入框和勾选框作为测试点。</think>在处理“输入框和勾选框禁止选用测试点”的需求时,需从测试策略、工具配置和代码设计三个层面进行控制。以下是分步说明: --- ### **一、明确测试目标** 1. **区分测试类型** - **UI测试**:若需验证界面交互(如输入格式、勾选状态),则允许操作这些元素。 - **业务逻辑测试**:若测试核心功能(如提交表单后的数据处理),应跳过直接操作UI组件。 --- ### **二、自动化测试中的实现方法** #### **1. 使用元素属性过滤** 在测试脚本中添加条件判断,跳过特定类型的元素: ```javascript // 示例:Selenium WebDriver (Java) List<WebElement> inputs = driver.findElements(By.tagName("input")); for (WebElement input : inputs) { String type = input.getAttribute("type"); if (type.equals("text") || type.equals("checkbox")) { continue; // 跳过输入框和勾选框 } // 其他操作... } ``` #### **2. 配置测试框架规则** - **Playwright**:通过选择器排除特定元素 ```javascript await page.click('button:not([type="checkbox"]):not([type="text"])'); ``` - **Cypress**:自定义命令忽略元素 ```javascript Cypress.Commands.add('skipInputs', () => { cy.get('body').find('input').not('[type="text"], [type="checkbox"]'); }); ``` --- ### **三、非自动化测试管理** 1. **测试用例设计规范** - 在测试用例文档中明确标注:“禁止直接操作输入框/勾选框,仅验证后端响应或数据流”。 2. **代码审查与静态分析** - 使用ESLint等工具检测测试代码,禁止直接调用`input`或`checkbox`相关操作: ```javascript // .eslintrc 示例规则 rules: { "no-restricted-syntax": [ "error", { selector: "CallExpression[callee.property.name='type']", message: "禁止直接操作输入框,请改用API模拟数据" } ] } ``` --- ### **四、分层测试策略** 1. **单元测试**:直接调用函数传参,不依赖UI组件。 ```python # 示例:Python unittest def test_form_submit(self): result = process_form_data({"name": "Test", "agree": True}) # 绕过UI直接测试逻辑 self.assertTrue(result.is_valid) ``` 2. **接口测试**:通过API发送请求,验证数据处理结果,避免触发前端操作。 --- ### **五、例外情况处理** 若必须操作UI元素(如验证输入格式): - **隔离测试场景**:单独创建仅包含目标元素的测试模块。 - **Mock依赖**:模拟后端服务,确保测试仅关注UI行为。 --- ### **总结** 通过工具配置、代码规范、分层测试三管齐下,可有效禁止将输入框/勾选框作为非必要测试点。核心原则是:**根据测试类型明确范围,优先通过数据驱动或接口测试覆盖逻辑,减少对UI的依赖**。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值