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,以此类推。