selenium下拉框踩坑埋坑

探讨了web端全站重构导致UI变化,原有测试用例失效的问题。对比了传统页面元素操作方法与重构后隐藏元素处理的区别,介绍了使用JavaScript使隐藏元素可见并进行测试的解决方案。

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

本文来自网易云社区

作者:王利蓉


最近web端全站重构,所有的页面都大大小小都有些变动,UI就全军覆没了,用例从登录改,改到个人信息页面发现根以前的实现方式完全不一样,这可怎么解决

1.以前的实现(option value的对应),现在是新页面 我就找个其他网站的参考下

b26ad583-750e-4a49-af14-61d7ce4ebb7a

<html>
    <head>
        <title>Select</title>
    </head>
    <body>
        <span>select demo</span>
        <select id = "s" name = "ns">
            <option value = "0">Op1</option>
            <option value = "1">Op2</option>
            <option value = "2">Op3</option>
            <option value = "3">Op4</option>
        </select>
    </body>
</html>

这种通过直接给value赋值即可,网上寻找解决方法也很多,脚本实现如下:

bot.click(By.xpath("//select[@id='birth-year']/option[@value='" + year + "']"));

2.重构之后的实现,选择时元素为隐藏状态,选择过程是联动的,找不到元素 哭!!

48135863-f70b-4ac9-9355-a0a7c752afb9

860e7fdc-1d49-49ed-8fc1-c1f086257d8f?imageView&thumbnail=980x0

这种该如何解决呢?开始的时候想采用第一种方法,隐藏的那个元素直接赋值,如红框所示,想想也是不可能的,于是就网上找解决方法,如何将隐藏的元素显示出来,果真还真被找到了,通过js,显示各种隐藏的元素。

js="var p=document.getElementByClassName('Select-value');p.style.display='block';"
driver.execute_script(js);
bot.click(By.xpath("//div[@aria-owns='react-select-5--list'][@aria-activedescendant='"+province+"']"));


网易云免费体验馆,0成本体验20+款云产品!

更多网易研发、产品、运营经验分享请访问网易云社区



相关文章:
【推荐】 数据分析入门:如何训练数据分析思维?
【推荐】 反射型 DDoS 攻击的原理和防范措施

### 使用 Selenium 处理下拉框元素 Selenium 提供了多种方式来处理网页中的下拉框元素,尤其是通过 `Select` 模块可以高效地操作下拉选项。以下是几种常见的处理方法: #### 1. 定位下拉框并点击选项 可以通过直接定位下拉框中的选项并点击来实现选择。这种方式适用于简单的下拉框操作,但容易因页面加载问题导致失败。示例代码如下: ```python from selenium import webdriver from time import sleep driver = webdriver.Chrome() driver.get("https://www.baidu.com") # 定位下拉框并点击特定选项 driver.find_element_by_xpath("//*[@id='nr']/option[2]").click() sleep(3) driver.quit() ``` #### 2. 使用 Select 模块操作下拉框 Selenium 的 `Select` 类提供了更稳定和灵活的方式来操作下拉框。首先需要导入 `Select` 模块,并通过它创建下拉框对象,然后使用其方法进行操作: ```python from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.select import Select import time driver = webdriver.Chrome() driver.implicitly_wait(10) driver.get("http://sahitest.com/demo/selectTest.htm") # 定位下拉框元素并创建 Select 对象 element = driver.find_element(By.ID, 's1Id') se = Select(element) # 根据索引选择选项 se.select_by_index(0) time.sleep(3) driver.quit() ``` #### 3. 根据 value 或可见文本选择选项 除了通过索引选择选项,还可以根据 `value` 属性或可见文本进行选择: ```python se.select_by_value("o2") # 根据 value 属性选择 se.select_by_visible_text("o3") # 根据可见文本选择 ``` #### 4. 多选下拉框操作 如果下拉框支持多选,可以使用 `deselect` 系列方法取消选中选项: ```python se.deselect_all() # 取消所有选中 se.deselect_by_index(0) # 根据索引取消选中 se.deselect_by_value("o1") # 根据 value 取消选中 se.deselect_by_visible_text("o1") # 根据可见文本取消选中 ``` #### 5. 获取所有选项 可以使用 `options` 属性获取下拉框中的所有选项,并进行遍历或其他操作: ```python options = se.options # 获取所有选项 for option in options: print(option.text) ``` ### 注意事项 - 在操作下拉框之前,确保页面已经完全加载,否则可能导致元素定位失败。可以通过 `implicitly_wait()` 或 `time.sleep()` 来等待页面加载完成。 - 如果下拉框是通过 JavaScript 动态生成的,可能需要额外的等待或触发操作才能正确显示选项。 通过上述方法,可以灵活地处理 Selenium 中的下拉框元素,确保自动化测试的稳定性和准确性。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值