Как найти вход в div - PullRequest
       47

Как найти вход в div

0 голосов
/ 27 декабря 2018

У меня проблема с чтением XPath.Нужна помощь / совет от экспертов.

Часть кода HTML:

<div id="nav-typeahead-wormhole">
    <div class="nav-search-typeahead">
        <artdeco-typeahead-deprecated id="nav-search-artdeco-typeahead" class="search-typeahead-v2 ember-view">
            <artdeco-typeahead-deprecated-input id="ember35" class="ember-view">
                <!---->
                <input role="combobox" autocomplete="off" spellcheck="false" aria-autocomplete="list" aria-expanded="false" placeholder="Recherche" type="text">
            </artdeco-typeahead-deprecated-input>
            <!---->

Я пытаюсь выбрать вход в div id="nav-typeahead-wormhole", используя Xpath

Myкод следующий:

search = browser.find_element_by_xpath("//div[@id='nav-typeahead-wormhole']/input[1]")

Я получил эту ошибку:

selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"//div[@id='nav-typeahead-wormhole']/input[1]"}

Ответы [ 3 ]

0 голосов
/ 27 декабря 2018

Xpath медленный.Попробуйте использовать селекторы CSS:

#nav-typeahead-wormhole input
0 голосов
/ 27 декабря 2018

Требуемый элемент <input> - это элемент Ember.js , поэтому для определения элемента, который вам нужно вызвать WebDriverWait , чтобы элемент был кликабельным иВы можете использовать любое из следующих решений:

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

    search = WebDriverWait(browser, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "div#nav-typeahead-wormhole input[placeholder='Recherche']")))
    
  • Использование XPATH:

    search = WebDriverWait(browser, 20).until(EC.element_to_be_clickable((By.XPATH, "//div[@id='nav-typeahead-wormhole']//input[@placeholder='Recherche']")))
    
  • Примечание : необходимо добавить следующий импорт:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    
0 голосов
/ 27 декабря 2018

Элемент INPUT не является дочерним по отношению к DIV, на который вы ссылаетесь в локаторе, как подразумевается оператором /./ - это ребенок (на один уровень ниже), // - любой потомок (на один или несколько уровней ниже).Таким образом, ваш XPath должен быть:

//div[@id='nav-typeahead-wormhole']//input[1]

Другие альтернативы:

//div[@id='nav-typeahead-wormhole']/div//input

или

//artdeco-typeahead-deprecated[@id='nav-search-artdeco-typeahead']/artdeco-typeahead-deprecated-input/input

или

//artdeco-typeahead-deprecated/artdeco-typeahead-deprecated-input/input

или

//div[@id="nav-typeahead-wormhole"]//input[@placeholder="Recherche"]
...