Не удалось обнаружить ошибку элемента при попытке найти элемент поля ввода с помощью Selenium через Python - PullRequest
0 голосов
/ 28 марта 2019

Я пытаюсь найти текстовое поле с Python и Selenium.

это кусок HTML.Я хочу найти текстовое поле, чтобы заполнить его.

<td class="x-table-layout-cell" role="presentation" style="padding: 2px;">
    <div role="presentation" class=" x-form-field-wrap  x-component" id="x-auto-225" style="width: 150px;"></div>
    <input type="text" class=" x-form-field x-form-text " id="x-auto-225-input" name="PURCHASE_ORDER_CODE_NAME" tabindex="0" style="width: 150px;">
</td>

Моя последняя попытка была:

pc = browser.find_element_by_css_selector("#x-auto-225-input").click()
pc.send_keys("7555425-1")

Ответы [ 3 ]

1 голос
/ 28 марта 2019

Глядя на html, упомянутое id может быть динамическим, поэтому вы не можете поместить статический идентификатор в свой идентификатор.
Однако, поскольку атрибут name присутствует в html, вы можете использовать его дляидентифицируйте свой элемент, например:

browser.find_element_by_name("PURCHASE_ORDER_CODE_NAME").click()

Обновленный ответ согласно обсуждению с OP

Поскольку в пользовательском интерфейсе присутствует iframe, сначала необходимо переключиться наiframe и затем нажмите на элемент.
Чтобы переключиться на iframe, вы можете использовать:

browser.switch_to.frame(browser.find_element_by_tag_name('iframe'))

, а затем использовать:

pc = browser.find_element_by_name("PURCHASE_ORDER_CODE_NAME")
pc.click()
pc.send_keys("7555425-1")

, если вы хотите переключиться обратнок содержимому по умолчанию вы можете использовать:

browser.switch_to.default_content()
0 голосов
/ 28 марта 2019

Может быть, вы можете попробовать другой подход "селектор".Например (Javascript):

selenium.By.xpath('//*[@data-icon="edit"]')
driver.findElement(by).click()
0 голосов
/ 28 марта 2019

Требуемый элемент является динамическим элементом, поэтому для вызова click() на элементе необходимо заставить WebDriverWait , чтобы элемент был активным , и вы можете использовать любой из следующих Стратегии локатора :

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

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input.x-form-field.x-form-text[id$='-input'][name='PURCHASE_ORDER_CODE_NAME']"))).click();
    
  • Использование XPATH:

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

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    
...