Как найти элемент с динамическим идентификатором через Selenium Webdriver

Я столкнулся с этим вопросом. Мое исправление заключалось в создании дочерней схемы. См. Ниже пример для ваших моделей.

---- Персональная модель

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);
1
задан DebanjanB 16 January 2019 в 02:33
поделиться

2 ответа

Буквенно-цифровые символы перед '-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')]")
0
ответ дан cullzie 16 January 2019 в 02:33
поделиться

Чтобы отправить дату , т. Е. Последовательность символов , в текстовое поле в качестве требуемого элемента является динамический элемент, вам нужно вызвать 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")
    
  • [ 1112]

    Используя 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

0
ответ дан DebanjanB 16 January 2019 в 02:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: