分享:selenium ide定位动态元素问题(解决方法:动态元素删除/不删除方案);第二次补充:通过数组定位class等不唯一的元素问题。

1.正在接触的项目,有部分的元素(比如输入框、下拉框..)复制的JS、XPATH总是有一串数字在变化,每次复制都不一样,导致该条代码在每次重新进入这个页面,重新定位这个元素时,总会报错。

2.解决方法:将动态变化的那串数字直接删除,就OK了。

3.基于我的实际情况,我在selenium ide里面只能用execute script命令,Target就是右键复制JS,然后将动态的那一串删除掉,然后如果是下拉框在后面加.click()就可点击了,假说是输入框,查看“属性”,我这里是加.value=‘123’,123就可输入了。

***********************************第一次补充!!!*****************************************

基于上文,我这有一个需要点击展开的按钮,也包含动态随机变化,我先采用上面解决方法,但是复制了一个JS长这样:document.querySelector("#app > div > div > section > section > main > div > div.tabs-view-content > div > div > div > div > div > wujie-app").shadowRoot.querySelector("#el-collapse-head-7969"),这里将#el-collapse-head-7969删除掉也没有用了。

(F12源代码:<div role="button" id="el-collapse-head-7969" tabindex="0" class="el-collapse-item__header is-active"><div class="panel-tab__title"><i class="el-icon-s-claim"></i>审核人设置</div><i class="el-collapse-item__arrow el-icon-arrow-right is-active"></i></div>)

解决方法如下:

在 Selenium IDE 中,由于您提到 #el-collapse-head-7969 这个 ID 随机变化,您可以尝试使用更稳定的选择器来定位这个元素。根据提供的 HTML 结构,可以考虑使用类名或者部分稳定的 ID 来进行定位。

例如,如果 el-collapse-item__header 类名是稳定的,可以尝试以下命令:

executeScript("return document.querySelector('#app > div > div > section > section > main > div > div.tabs-view-content > div > div > div > div > div > wujie-app').shadowRoot.querySelector('.el-collapse-item__header[role=\"button\"]');").click()

这段代码会找到具有 role="button" 属性以及类名 el-collapse-item__header 的元素并执行 click 操作。

还有一种方法:

若 focusing 类名也是动态添加的且仅在需要点击时出现,也可以将其包含在选择器中以提高定位准确性:

executeScript("return document.querySelector('#app > div > div > section > section > main > div > div.tabs-view-content > div > div > div > div > div > wujie-app').shadowRoot.querySelector('.el-collapse-item__header.focusing[role=\"button\"]');").click()

***********************************第二次补充!!!*****************************************

1.第一次补充完之后,单独执行那条代码可是展开,但是从头执行,这条代码要不报错,要不就操控上这个按钮上面那个按钮了,原来是class也不唯一,那就想着是不是可以通过数组或者索引来定位,经过查询。

解决方法如下:

executeScript | return (function clickOnNthButton(n) { var shadowHost = document.querySelector('#app > div > div > section > section > main > div > div.tabs-view-content > div > div > div > div > div > wujie-app'); var shadowRoot = shadowHost.shadowRoot; var buttons = Array.from(shadowRoot.querySelectorAll('.el-collapse-item__header[role="button"]')); var targetButton = buttons[n]; if (targetButton) { targetButton.click(); return true; } else { throw new Error('The index provided is out of range.'); } })(1) // 将 1 替换为您想要选择的按钮索引

在这段代码中,(1) 是传递给 clickOnNthButton 函数的参数,表示要点击的按钮索引(从 0 开始)。如果您想点击第二个按钮,则传入 1;第三个按钮则传入 2,以此类推。

  • 17
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值