如何验证vba在网站上的操作?
问题描述:
为了标记网站中的复选框,我让vba在ie中打开该网站。但是,即使复选框显示为已标记,我注意到当我让VBA执行此操作并手动单击自己的区别时,元素的class
在单击后更改为“脏”而不是“原始”。如何验证vba在网站上的操作?
如果没有改变为“脏......”并触及,网站并没有注册实际执行的操作。所以我试图设置“脏...”类的属性进行检查,但它没有注册执行的动作,所以我想比较“脏......”和“脏”的所有属性, pristine ..“类,看我是否可以通过改变所需的所有表达式来使它变得更加肮脏。
因此,我手动比较了手动用户点击之前和之后的elemnt代码,它位于下面的vba代码中作为第一条评论。
'Difference in html element code between vba clicking the checkbox and an actual user clicking the checkbox:
'<form name="forms.addressContract" class="form __hor ng-pristine ng-scope ng-invalid ng-invalid-required ng-valid-pattern ng-valid-maxlength" novalidate="" ng-class="{'force-show-errors': isSubmitted}" ng-submit="submitAddress()">
'<form name="forms.addressContract" class="form __hor ng-scope ng-invalid ng-invalid-required ng-valid-pattern ng-valid-maxlength ng-dirty ng-valid-parse" novalidate="" ng-class="{'force-show-errors': isSubmitted}" ng-submit="submitAddress()">
'<input class="ng-pristine ng-valid ng-touched" id="permission" type="checkbox" ng-model="permission.checked">
'<input class="ng-valid ng-touched ng-dirty ng-valid-parse" id="permission" type="checkbox" ng-model="permission.checked">
Set elements1a = ie.document.getElementsByClassName("ng-valid ng-touched ng-dirty ng-valid-parse")
MsgBox (elementa1a)
For Each Item In elements1a
If elements1a.Item.Checked = False Then
elements1a.Item.Click
If elements1a.Item.Checked = True Then
MsgBox ("clicking the checkbox switched the checked-ness of the item to true")
End If
End If
If elements1a.Item.complete = False Then
elements1a.Item.Click
If elements1a.Item.complete = True Then
MsgBox ("clicking the checkbox switched the completeness of the item to true")
End If
End If
MsgBox (elements1a.Item.className & " and " & elements1a.Item.Checked)
If elements1a.Item.className = "ng-valid ng-touched ng-dirty ng-valid-parse" Then
elements1a.Item.Checked = True
MsgBox (elements1a.Item.Checked)
'Element code when vba clicks the button:
'<form name="forms.addressContract" class="form __hor ng-scope ng-valid-maxlength ng-valid-pattern ng-invalid ng-invalid-required ng-valid-parse ng-pristine" novalidate="" ng-class="{'force-show-errors': isSubmitted}" ng-submit="submitAddress()">
'Element code when an actual user actually clicks the button
'<form name="forms.addressContract" class="form __hor ng-scope ng-valid-maxlength ng-valid-pattern ng-invalid ng-invalid-required ng-valid-parse ng-dirty" novalidate="" ng-class="{'force-show-errors': isSubmitted}" ng-submit="submitAddress()">
End If
Next
'the vba command for the not user-clicked checkbox
Set elements1b = ie.document.getElementsByClassName("ng-pristine ng-valid ng-touched")
MsgBox (element1b)
For Each Item In elements1b
If elements1b.Item.className = "ng-pristine ng-valid ng-touched" Then
elements1b.Item.Checked = True
MsgBox (elements1b.Item.Checked)
'<form name="forms.addressContract" class="form __hor ng-scope ng-valid-maxlength ng-valid-pattern ng-invalid ng-invalid-required ng-valid-parse ng-pristine" novalidate="" ng-class="{'force-show-errors': isSubmitted}" ng-submit="submitAddress()">
'<form name="forms.addressContract" class="form __hor ng-scope ng-valid-maxlength ng-valid-pattern ng-invalid ng-invalid-required ng-valid-parse ng-dirty" novalidate="" ng-class="{'force-show-errors': isSubmitted}" ng-submit="submitAddress()">
End If
Next
答
对于那些磕磕绊绊时同样的问题,这并获得成功:
'1. Mark checkbox
'MsgBox ("engage filling")
Set elements1e = ie.document.getElementById("permission")
'MsgBox (elements1e.Name & " " & elements1e.className & elements1e.placeholder)
elements1e.Focus
elements1e.Click
' MsgBox ("cLICKED")
我不知道为什么它可以.focus
和.click
不是别人这个元素上。我认为它与网站本身的html代码中的对象类型有关。