如何解决在VBA中使用Selenium选择/取消选择网页上的一组复选框
下面是带有6个复选框的网页框架的一部分。我正在尝试在VBA中创建一个可重用的脚本,以选择或取消选择此表元素中的所有复选框。
在一个表单元格中有多个复选框,因此我尝试使用表元素进行操作不起作用。
我认为基于“对于每个对象来说都可以解决问题,但是不幸的是,我无法使其起作用。另一方面,我也可能会遍历所有具有” // input [@ type ='checkBox”的元素']”,然后检查父元素是否与“ / p [@ id ='p_status'] / table / tbody / tr / td”匹配。在这里,选择元素很容易,但可以验证父元素不断失败。也许我在这里错过了一个重要的选择。
也许可以创建代码,但是我真的很感谢这里的帮助。
<p id="p_status" style="">
<table width="50%" align="center">
<tbody><tr>
<td Nowrap="">
<input type="checkBox" name="status" value="X"><b>Dr</b><br>
<input type="checkBox" name="status" value="W" checked=""><b>Pe</b><br>
<input type="checkBox" name="status" value="R"><b>Re</b>
</td>
<td Nowrap="" width="50%">
<input type="checkBox" name="status" value="U"><b>UI</b><br>
<input type="checkBox" name="status" value="A"><b>Au</b><br>
<input type="checkBox" name="status" value="Q"><b>SA</b>
</td>
</tr>
</tbody></table>
</p>
Art。
解决方法
如果要一次性选择/取消选中所有复选框,则可以使用以下代码:
Set checkboxes= driver.FindElementsByXPath("//p[@id='p_status']//input[@type='checkbox']")
For Each checkbox In checkboxes
checkbox.Click
Next
它将选中所有未选中的复选框,反之亦然。
但是,如果您要创建可重用的功能,以在给定时间选择/取消选择任何一个复选框。您可以创建如下函数:
Sub Check_checkboxLogo(driver As WebDriver,lbl as String)
set xpath_Checkbox = "//p[@id='p_status']//b[text()='"& lbl &"']//preceding-sibling::input[@type='checkbox']"
driver.FindElementByXPath(xpath_Checkbox).Click
End Sub
现在您可以调用上述功能,例如Check_checkboxLogo(driver,"Dr")
或Check_checkboxLogo(driver,"Pe")
等。
谢谢拉胡尔!不知何故,我的问题的某些部分在**对于Webelements中的每个Webelement都被省略了,但是我希望可以在此处找到解决方案。
我的可重用解决方案更通用,但功能相同:
Public Function AllCkBoxes(strXP As String,_
Optional blnSelect As Boolean = False,_
Optional lngTimeOut As Long = 500)
'This function deselects (blnSelect=False) or selects (blnSelect=True) all child checkboxes of a webelement
On Error GoTo Err_Proc
Dim lngResult As Long
Dim wEle As WebElement
Dim wEles As WebElements
Dim strXpType As String
With driver
strXpType = "//preceding-sibling::input[@type='checkbox']"
lngResult = .FindElementsByXPath(XPath:=strXP & strXpType).Count
If lngResult > 0 Then
Set wEles = .FindElementsByXPath(XPath:=strXP & strXpType,timeout:=lngTimeOut)
For Each wEle In wEles
If wEle.IsSelected <> blnSelect Then
wEle.Click
End If
Next
End If
End With
Exit_Proc:
On Error Resume Next
Set wEle = Nothing
Set wEles = Nothing
Exit Function
Err_Proc:
Select Case Err.Number
Case Else
MsgBox "Error: " & CStr(Err.Number) & vbCrLf & _
"Desc: " & Err.Description & vbCrLf & vbCrLf & _
"Source: " & Err.Source & vbCrLf & _
"Library: " & Application.CurrentProject.Name & vbCrLf & _
"Module: Mod_RA" & vbCrLf & _
"Function: AllCkBoxes" & vbCrLf,_
vbCritical,"Error"
End Select
Resume Exit_Proc
Resume
End Function
再次,谢谢!
Art。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。