Я столкнулся с этим вопросом. Мое исправление заключалось в создании дочерней схемы. См. Ниже пример для ваших моделей.
---- Персональная модель
const mongoose = require('mongoose');
const SingleFriend = require('./SingleFriend');
const Schema = mongoose.Schema;
const productSchema = new Schema({
friends : [SingleFriend.schema]
});
module.exports = mongoose.model('Person', personSchema);
*** Важно: SingleFriend.schema -> обязательно используйте строчные буквы для схемы
--- Схема ребенка
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
const SingleFriendSchema = new Schema({
Name: String
});
module.exports = mongoose.model('SingleFriend', SingleFriendSchema);
Буквенно-цифровые символы перед '-toDate', похоже, генерируются автоматически. Это означает, что они могут меняться между сборками сайта или могут создаваться динамически при запуске js.
Поэтому я бы использовал ключевое слово contains в xpath, так как оно должно быть более устойчивым к этим изменениям.
to_date = driver.find_element_by_xpath("//input[contains(@id, '-toDate')]")
from_date = driver.find_element_by_xpath("//input[contains(@id, '-fromDate')]")
Чтобы отправить дату , т. Е. Последовательность символов , в текстовое поле в качестве требуемого элемента является динамический элемент, вам нужно вызвать WebDriverWait ] для элемента , который можно активировать нажатием , и вы можете использовать любое из следующих решений:
Используя CSS_SELECTOR
:
WebDriverWait(browser, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input[id$='-toDate'][onchange*='-toDate']"))).send_keys("01/16/2019")
Используя XPATH
:
WebDriverWait(browser, 20).until(EC.element_to_be_clickable((By.XPATH, "//input[contains(@id, '-toDate') and contains(@onchange, '-toDate')]"))).send_keys("01/16/2019")
Примечание : Вы должны добавить следующие импорты:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
Подробное обсуждение можно найти в Selenium «selenium.common.exceptions.NoSuchElementException» при использовании Chrome
blockquote>