Не удается найти поле ввода, используя Selenium python - PullRequest
0 голосов
/ 10 февраля 2020

Я пытаюсь найти поле ввода, используя python Селен:

try:
    thisbox = driver.find_element_by_id('tbRepID')

except EC.NoSuchElementException:
    print("Could not locate the Repair ID Box!")

Selenium может найти первые 5 блоков, используя этот код того же типа, но по какой-то причине он вызывает «NoSuchElementException» при попытке найти шестую. Я пытался использовать "find_element_by_name" и "find_element_by_id" безуспешно.

https://i.stack.imgur.com/nmJV6.jpg

                   <table class="gray-border" cellspacing="5" cellpadding="0" width="100%" border="0">
                        <tbody><tr>
                            <td colspan="4">
                                      Part Nbr:<input name="tbPn" type="text" id="tbPn" style="width:112px;">
                                &nbsp;/SN:<input name="tbSn" type="text" id="tbSn" style="width:72px;">
                                &nbsp; or PO Nbr:<input name="tbPOnbr" type="text" id="tbPOnbr" style="width:72px;">
                                &nbsp; or SO Nbr:<input name="tbSOnbr" type="text" id="tbSOnbr" style="width:72px;">
                                &nbsp; or WO Nbr:<input name="tbWOnbr" type="text" id="tbWOnbr" style="width:72px;">
                                &nbsp; or Rep Id:<input name="tbRepId" type="text" id="tbRepId" style="width:56px;">
                                &nbsp;&nbsp;
                                
                                &nbsp;&nbsp;
                                <input type="submit" name="bFind1" value="Find" onclick="javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions(&quot;bFind1&quot;, &quot;&quot;, true, &quot;&quot;, &quot;&quot;, false, false))" id="bFind1">
                                &nbsp;&nbsp;
                                
                            </td>
                        </tr>

Ответы [ 3 ]

0 голосов
/ 11 февраля 2020

Чтобы щелкнуть шестое поле, подходящее к тексту или Rep Id , вам нужно вызвать WebDriverWait для element_to_be_clickable(), и вы можете использовать любое из следующих решений:

  • Использование CSS_SELECTOR:

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input#tbRepId[name='tbRepId']"))).click()
    
  • Использование XPATH:

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//input[@id='tbRepId' and @name='tbRepId']"))).click()
    
  • Примечание : необходимо добавить следующий импорт:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    
0 голосов
/ 12 февраля 2020

Хотя я не мог ссылаться на поле ввода Rep ID напрямую, я мог ссылаться на него косвенно, используя:

inputBoxes = []
inputBoxes = driver.find_elements_by_css_selector("input[type='text']")

# Send repair ID
inputBoxes[5].send_keys('145862')
0 голосов
/ 10 февраля 2020

Без ошибки, которую вы получите с шестой, я не могу точно знать, в чем проблема.

Но по описанию и надеясь, что в коде нет ошибок, браузер может изменить DOM для страницы. И водитель продолжает пытаться найти элемент в неправильном DOM. У меня была эта проблема с некоторыми веб-страницами.

Разрешение, которое у меня было для этого, заключалось во всех взаимодействиях с элементом, использующих функцию поиска элемента. В Java: driver.findElement (By.id ("id"));

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...