Issue
I am trying to click on a button using selenium in VBA and I set this line
Set ele = .FindElementByXPath("//div/button[@ng-click='VerifyData()']")
On the webpage, I can find this XPath and it is correct but when trying it in the code, I got an error No Such Element I have searched for iframe in the HTML page but no clue
<div class="form-details">
<div class="row">
<div class="col-12 text-center">
<a style="color: #ea3c00; font-size: 20px;" class="float-right back-button" ng-click="BackToHome()"><i class="fas fa-arrow-right"></i> </a>
<h5>
</h5>
</div>
<div class="col-12 form-group form-item">
<label for=""><span> أدخل </span> <span style="font-size:.7em;" ng-show="EmailType == 1" class=""></span></label>
<input type="text" pattern="\d*" class="form-control number ng-valid ng-valid-pattern ng-valid-maxlength ng-not-empty ng-dirty ng-valid-parse ng-touched" maxlength="16" ng-model="NationalId">
</div>
<div class="col-12 form-group form-item">
<label for="" class="ng-binding">ss</label>
<input type="text" pattern="\d*" class="form-control number ng-valid ng-valid-pattern ng-valid-maxlength ng-not-empty ng-dirty ng-valid-parse ng-touched" maxlength="16" ng-model="PrincipleCode">
</div>
<div class="col-12 text-center">
<div id="recaptcha01" class="g-recaptcha" data-sitekey="6LdpU8gZAAAAAO6-5k51vSLoNVV1Wmsc77S7ptlV"><div style="width: 304px; height: 78px;"><div><iframe title="reCAPTCHA" src="https://www.google.com/recaptcha/api2/anchor?ar=1&k=6LdpU8gZAAAAAO6-5k51vSLoNVV1Wmsc77S7ptlV&co=aHR0cHM6Ly9vZmZpY2UzNjUuZW1pcy5nb3YuZWc6NDQz&hl=ar&v=rPvs0Nyx3sANE-ZHUN-0nM85&size=normal&cb=k31qvndf1wp5" width="304" height="78" role="presentation" name="a-g716ep6e9b8d" frameborder="0" scrolling="no" sandbox="allow-forms allow-popups allow-same-origin allow-scripts allow-top-navigation allow-modals allow-popups-to-escape-sandbox"></iframe></div><textarea id="g-recaptcha-response" name="g-recaptcha-response" class="g-recaptcha-response" style="width: 250px; height: 40px; border: 1px solid rgb(193, 193, 193); margin: 10px 25px; padding: 0px; resize: none; display: none;"></textarea></div></div>
</div>
<div class="col-12 mt-3 text-center">
<button class="btn check-btn" ng-click="VerifyData()" ng-show="Loading == false">CHECK </button>
<img src="/wwwroot/images/loader.gif" width="60" ng-show="Loading == true" class="ng-hide">
</div>
<div class="col-12 text-center error-container ng-binding ng-hide" ng-show="ErrorMessage !=''">
</div>
</div>
</div>
This is the code I am trying till now
.AddArgument "--disable-notifications"
.Start "Chrome"
.Get "https://office365.emis.gov.eg/"
.Wait 1000
.FindElementByXPath("//button[@ng-click='SetEmailType(1)']").Click
With .FindElementByXPath("//input[@ng-model='NationalId']")
.Clear: .SendKeys shEF.Cells(ActiveCell.Row, 2).Value
End With
With .FindElementByXPath("//input[@ng-model='PrincipleCode']")
.Clear: .SendKeys shEF.Cells(ActiveCell.Row, 1).Value
End With
.SwitchToFrame .FindElementByTag("iframe", timeout:=10000)
.Wait 1000
.FindElementByXPath("//*[@id='recaptcha-anchor']").Click
.Wait 1000
On another page, there is a nother square for captcha to check and here's the outerhtml
<div id="recaptcha02" class="g-recaptcha" data-sitekey="6LdpU8gZAAAAAO6-5k51vSLoNVV1Wmsc77S7ptlV"><div style="width: 304px; height: 78px;"><div><iframe title="reCAPTCHA" src="https://www.google.com/recaptcha/api2/anchor?ar=1&k=6LdpU8gZAAAAAO6-5k51vSLoNVV1Wmsc77S7ptlV&co=aHR0cHM6Ly9vZmZpY2UzNjUuZW1pcy5nb3YuZWc6NDQz&hl=ar&v=rPvs0Nyx3sANE-ZHUN-0nM85&size=normal&cb=yb04gn21huf7" width="304" height="78" role="presentation" name="a-gmezfxiw48et" frameborder="0" scrolling="no" sandbox="allow-forms allow-popups allow-same-origin allow-scripts allow-top-navigation allow-modals allow-popups-to-escape-sandbox"></iframe></div><textarea id="g-recaptcha-response-1" name="g-recaptcha-response" class="g-recaptcha-response" style="width: 250px; height: 40px; border: 1px solid rgb(193, 193, 193); margin: 10px 25px; padding: 0px; resize: none; display: none;"></textarea></div></div>
I couldn't check that square although I could do in a previous page
Solution
Please check in the dev tools
(Google chrome) if we have unique entry in HTML DOM
or not.
Steps to check:
Press F12 in Chrome
-> go to element
section -> do a CTRL + F
-> then paste the xpath
and see, if your desired element
is getting highlighted with 1/1
matching node.
If this is unique //div/button[@ng-click='VerifyData()']
then you need to check for the below conditions as well.
- Check if it's in any
iframe/frame/frameset
. - Check if it's in any
shadow-root
. - Make sure that the element is rendered properly before interacting with it. Put some
hardcoded delay
orExplicit wait
and try again. - If you have redirected to a
new tab/ or new windows
and you have not switched to that particularnew tab/new window
, otherwise you will likely getNoSuchElement
exception. - If you have switched to an iframe and the new desired element is not in the same iframe context then first
switch to default content
and then interact with it.
Switch to defaultcontent
:
driver.SwitchToDefaultContent
Answered By - cruisepandey
0 comments:
Post a Comment
Note: Only a member of this blog may post a comment.