Невозможно отправить_ключи в поле ввода, несмотря на то, что он может быть найден - PullRequest
0 голосов
/ 16 апреля 2020
<mat-form-field _ngcontent-mob-c74 class="mat-form-field 
ng-tns-c19-29 mat-primary mat-form-field-type-mat-input mat-form-field-appearance-legacy mat-form-field-can-float
mat-form-field-has-label mat-form-field-hide-placeholder ng-star-inserted 
ng-touched mat-form-field-should-float ng-dirty ng-valid" data-test="name"> == $0
<div class="mat-form-field-warper">
    <div class="mat-form-field-flex">


    <div class="mat-form-field-infix">
         <input _ngcontent-mob-c74 class="mat-input-element mat-form-field-autofill-control
         cdk-text-field-autofill-monitored ng-touched ng-dirty ng-valid" formcontrolname="name" matinput 
         placeholder="Name on Card" id="mat-input-15" aria-invalid="false" aria-required="true" required> == $0

Так что в основном я пытаюсь ввести текст выше, который является полем для информации о кредитной карте. Я устал использовать элементы:

mat-form-field
mat-form-field-wrapper
mat-form-field-flex
mat-form-field-infix
mat-input-element

Я попробовал id

mat-input-15

Я попробовал щелкнуть элементы и очистить их перед использованием send_keys , Если я пытаюсь взаимодействовать с любым из них, я получаю сообщение об ошибке «элемент не взаимодействует»

На странице есть iframe, хотя в нем нет ничего, когда я проверяю его с помощью chrome, поэтому я не Не думаю, что это имеет какое-либо значение.

Любая помощь приветствуется, это вызывает проблемы весь день.

Ответы [ 3 ]

0 голосов
/ 20 апреля 2020

Попробуйте явное ожидание:

    wait = WebDriverWait(driver, 10)
    WebElement el = wait.until(ec.element_to_be_clickable((By.XPATH, "//div[@class=mat-form-field-infix/input")))
    el.clear()
    el = wait.until(ec.element_to_be_clickable((By.XPATH, "//div[@class=mat-form-field-infix/input")))
    el.send_keys("any name")

Примечание: пожалуйста, добавьте ниже импорта в ваш код:

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

пожалуйста, игнорируйте любые орфографические или отступные ошибки, не на моем p c , Отвечая с телефона.

0 голосов
/ 26 апреля 2020

Angular материал использует родные входы под капотом; Вы можете убедиться в этом во фрагменте, который вы разместили.

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

element(by.css("mat-form-field input"));
element(by.css("mat-form-field.emailInput input"));
0 голосов
/ 17 апреля 2020

По предложению Шри я попытался ввести значения, используя javascript .value. Это сработало в консоли chrome, поэтому я только что использовал javascript в своем коде python, это работает, хотя и выглядит немного неуклюже.

driver.execute_script("""
     cardNumberInput = document.getElementsByClassName('mat-input-element')
     cardNumberInput[4].value = "some name"
                      """)
...