I am trying to locate a text box to enter a text in it but couldn't because of the error 'no such element: Unable to locate element'
Here is the HTML of the page:
<form id="aaaSub" name="aaaSub" method="post" action="/ProvGwAaaGui/faces/jsp/dspAAABySearch.jsp" enctype="application/x-www-form-urlencoded">
<input type="hidden" name="aaaSub" value="aaaSub" />
<table id="aaaSub:msg1" style="height:30px; margin-left:20px;">
<tbody>
<tr>
<td></td>
</tr>
</tbody>
</table>
<table id="aaaSub:heading" style="height:60px; margin-left:20px;">
<tbody>
<tr>
<td><table >
<tbody>
<tr>
<td>Display Single Umc AAA Subscriber</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
<table border="1" style="margin-left:20px;">
<tbody>
<tr>
<td><table style="margin:10px 10px 10px 10px;">
<tbody>
<tr>
<td><table style="width:300px;">
<tbody>
<tr>
<td><span id="aaaSub:j_id_jsp_2095096634_11" >Identifier</span></td>
</tr>
</tbody>
</table>
</td>
<td><input id="aaaSub:identifier" name="aaaSub:identifier" type="text" value="" maxlength="32" size="30" onkeyup="disableOtherLink('aaaSub:identifier')" onchange="disableOtherLink('aaaSub:identifier')" /></td>
</tr>
<tr>
<td><table style="width:300px;">
<tbody>
<tr>
<td><span id="aaaSub:j_id_jsp_2095096634_15" >cn alias</span></td>
</tr>
</tbody>
</table>
</td>
<td><input id="aaaSub:cn" name="aaaSub:cn" type="text" value="" maxlength="32" size="30" onkeyup="disableOtherLink('aaaSub:cn')" onchange="disableOtherLink('aaaSub:cn')" /></td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
<table id="aaaSub:empty" style="height:130px; margin-left:20px;">
<tbody>
<tr>
<td><span id="aaaSub:j_id_jsp_2095096634_18"> </span></td>
</tr>
</tbody>
</table>
<table id="aaaSub:buttons" style="width:200px;margin-left:20px;">
<tbody>
<tr>
<td><input type="submit" name="aaaSub:j_id_jsp_2095096634_20" value="Display" style="height:25px;margin-left:5px;width:100px" onclick="return(mandatoryGeneralCheck())" /></td>
</tr>
</tbody>
</table>
<input type="hidden" name="javax.faces.ViewState" id="javax.faces.ViewState" value="H4sIAAAAAAAAANUaa2wcR3nu/L4kTeI0cV9OnMRgG5KL37HzaLGd17Xnh3JOaFPgMrc38a2zt7udnfPdNSS0RdAKVLUo8AMpFUggfsXlBxJUqLQFfiAhiiAIkEAqLX9KEUEIIUH4Efhm9nmXXe dHVK6P Z2Z2e d6vvavXUVOBoi2PJxfxEo4rWF2Iz2YWicQOvvjzR7 2yehTogiVdITQVoOiIUnLx42CGj HJWLEsa4rsoSZrKnxFMOMTGMVLxCayOtK9zwlZEbLkn c /5ry/3HX1/P4RQPI3518dNKFhSAqWsqUVn8VOK0TIonNY2hrYtpOZteNPT0YP/4SP/46OjQcLq/ZDyBLqFocUBA2e0PJcfySvwEDMc0mkfNGONUIWPvHIZ9EdQbsnMOq0Q5TuUsaswbCwP25iRsjqJBjS4A6VjKkXi 7AuDlJiAM00MAxhioHZSkojOGbU3b83ZQPfXiVFLjuCsrC7Y 4/C/sY69vtydsSGdgygNaG EGizBaYX2DyQ6Q9u1ItcPcT5QtvvhdayVmhjXmita4U2bkM7BNDa0PYgxZ7SlEJeRdv8YAw4en0SgMTQcO0K5hGEP iBSmqHagedUG3IMTkLb VzMqFeNamHd/7IDXmZt2GVzBv2Mu u28o8xyoOr555UUm1oYzUaQxNJK zspe8zbeVvLFVu6BMgTFNdVzYw7B/C9oTsn9Ky exmp0Ue/1RGuwvFThIfkV97pp1uJynjZco2hsWSbrnqKYTysqPkLKBrKsdYhFFd7kx76hayHtf6gw1K5qEFQJRb5NYV2CyEk KuUv/2nz2Sv NvzSg5gRqzWEjJ0GgS6IWSSuojJYZahfxdB HvS/FKLjrg0kUA1EQ1YAgIPi2M4la YICRAPrudmQqKwz66llCVMZq ZjSf8PXKBPp1IMIfglKp/vFkPpEv95AJBeArITWYY69gFr92UNfWJiYrKcIphKuThMAcviwWZm3QfyjJ/SydB6StQsoYTOl3WyRFHjkgZa4V4lXeDTB64DM6Ae1AWCHqQZLiMnKMXlpGyw0tPXOr/6E/xSA4okUKMhP0lEttFUbOQjbPqwP7oi3zihKYBHCi8R thPv3P48pU3p6MomkRtkoINYwbnbcbGDFiTFXvAGkzhyNq FAEGK/KTOKOQgyVdB1o2uzieAMFOY72p5Xc//PG2s79sQNFjKKZoOHsMS0yjCdTGcpQYOUCipAuRDoLedHvxLZIMJEnxqVMnTx6dmU fThz9ePrk7Oy8tZqPY87OLr ds9NzszN8b JIylopfvq5zQomRZiT5JRAvCP1iXeOykvAFR8p3 3Kbj6H2QQlKcKcsxvE2Q0WSkti2ocqPh501HOdqTiPyIzraOzE/HQyPTmRSkw5 gtyg3eGLQdhnAmVEcgq2//49W/ 8 lnx6JcU5qWsFIgJds4xbqZQj5D6OevfqVz3Zff/qKdt0YqgU1qmkKw mYXferXV/79VwB2xgamo6C80/U5kVCv1MJvPsJMxGw58FSUz8cD MfHUS/LqkVt2QMzE1LmZIEBGO9nVvRgrrMWcv3YCggccTSxhagSA9uuECIf5/jwoENrUyg32vy4wYPImrjhKL5fXl0znV7QwC DlRWyggXdGgjD/KQJkqHtOSIv5NiBoX69dLArj mCrO5VyDl2YJDPOIz9xIpqdu9qwqBdgYShGltQtAxWZlWlLDgyG7EEd79PwmEDFVb7GTBr8IHFVAHCOy0LYuwXMf7iCGFYVvjMM4DpcAhza0UYPEVZA80Gm DeW5z4HJxIKNXoFHf/DLXibFo8O2 FQKy3MXhrKY0jAb3icqaf4U8MNVzovygenUG8nXNEgWq0Bz4s3h4LCCjnVmUEfDR3Fl2lHQ1R2k/W4RvbhCCWqgSxCQRRxGkmM4WkMxBN7wiPRqt5FBXLo0E8cv3flRUpDowLdk7UmpFV7rqNGuhiVmyySaOox2OPi9gAE4kTJf6woZ/m646WdMhIeIqJH7v Vv/drxxaL1Lde0yrg5VVy4qxpx5/ 42bX4qKZVucZe6Kb3zuC6m/n7l2SMTT4gR6KCCz7B0d2jPa19Wz wJEqDgPT4SmDfE6bRQyPLOF6HyxB2jY6aHhVpR496j1 V03n31u ZX1lsG/XhxCO0Ige1MBs4el6yVTyNUBiBdF9Qj/VVf4L4uJy6Hi3mCrenNGo4Awf5rhw7fAX1oKzx3XHdH1sWpdbxTLGwPI/VmYb9gc7A4 VYc72GDxI2byI6NlyzbXoJTiNb9pI6LvdpsYZVEewKjxim5HUOE8ZJb1a/ex95t8PDAALOyqHFyO/srhV OdDy9BDau1076 KGdZDnKiCmLfrTvT5sPe/yWxA6sOFDdWJKa9Nml r0ayXjXvGRrzz7CqvKx4nDQj0UQW64zQAkUd1ocAWYtX1MYv/6Ltauq31xN2UeUJd DPu7g/X8xohhHgzseXL8Yevcx6XHe B91junPLj7tG5 /HGToU/O3BS0vV6RZpuh0GOnzSWR4NIDMdrbnpHZpMu9kNn3mrHvVxQ02kNTgZ5b9 MWhjHb5i4yq0i6O1jUOIdFRpAZ 7rziKdu2 kMEGmYQaO56VDR3SdHEfJmC /wG9lvLL6a2GiaEtj0sKgRo550SRLh5fIlA/t2qqlAMEoDr7EKDJlXyW5QhNyur53h6znXLAxbmnz94oWlQOvO22C4p01idkG1yLpp4n5QKfjex3RPynCoHP VUjQRrwvsSD4TXHAz7cdCh87/8vCtxSUtUaBSIn3ocoEGan3WhThfuV1BWtskLLIzvW4tROf/CcWhzdF DUwtkWEdCH TDCUGegq5HUnj6 aIwPB1brVfiWB/lQdBj75w YK7mlVFlFarnDal0MhDXc0ms0TVHTR7ZDkUcMCetuH8kUHgSzjwY15sxsIrSDKKp/hiJdjgF9tn4D8qu6HBv Ax/euSPCHbwddUOnWTcMirohWLRn661Da3Qakcteml8r7kcjQQ2R8fE9I05DxOzCpy3vcbFHbP9RsQ9t9X0f0MwAjRqv5zNrmH5B iFBGn0ebIYSVqBqL9 LmUbLx4lKKFamckQ639vXJxSEoXbv6eYZgFPAp1/xzYkDDENjE5Z4Iu m7VBU9AY1uqYJy2lZd 1D6y7g33TQ581O171OC6t63RPJjnVnXnjnb1Hr3DdWamY5snP8vhkpwVcf0 gRR4oU7apsZlWfysufxA38e2Xg0zut8ifyXbObtSLoWxWg n9a1nfl5Wun332v88JxuzRDXFGEX1p2v0D0WB5xcKTKaPizaVAD3KAqrXPFLlHk2577H3gNxA32LwmP9F9xhFd8ZSYAAA==" autocomplete="off" />
</form>
</div>
</body>
</html>
The requested box is here:
<td><input id="aaaSub:identifier" name="aaaSub:identifier" type="text" value="" maxlength="32" size="30" onkeyup="disableOtherLink('aaaSub:identifier')" onchange="disableOtherLink('aaaSub:identifier')" /></td>
I tried the following code
web.implicitly_wait(30)
web.find_element(By.XPATH,'//*[@id="aaaSub:identifier"]').send_keys('text')
CodePudding user response:
You were using invalid xpath locator.
Please use //input[@id="aaaSub:identifier"]
CodePudding user response:
The desired element is a dynamic element, so ideally to send a character sequence to the element you need to induce WebDriverWait for the element_to_be_clickable() and you can use either of the following locator strategies:
Using CSS_SELECTOR:
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input[id='aaaSub:identifier'][name='aaaSub:identifier'][onchange*='aaaSub:identifier']"))).send_keys("text")
Using XPATH:
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//input[@id='aaaSub:identifier' and @name='aaaSub:identifier'][contains(@onchange, 'aaaSub:identifier')]"))).send_keys("text")
Note: You have to add the following imports :
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC
References
You can find a couple of relevant discussions on NoSuchElementException in: