Как получить правильный xpath или элемент раскрывающейся кнопки, которая является динамической в ​​Selenium - PullRequest
0 голосов
/ 25 июня 2019

Я пытался выбрать раскрывающееся меню, но заметил, что его XPath и ID меняются каждый раз, поэтому он, вероятно, динамический.Как мне определить правильный путь для моего элемента в условиях такого типа?Мы пытаемся получить CSV в раскрывающемся меню

<div class="form-group">
        <label>Report Type</label>
    <div>
    <select data-dom-uuid="" tabindex="-1" data-name="Report Type" data-input-id="attached_report_type" data-type="select" class="editor-input select2-hidden-accessible" aria-label="Report Type" aria-hidden="true">


            <option value="csv">CSV</option>
            <option selected="selected" value="db">db</option>
            <option value="pdf">PDF</option>


    </select><span class="select2 select2-container select2-container--db select2-container--below select2-container--open" dir="ltr" style="width: 100px;"><span class="selection"><span class="select2-selection select2-selection--single" role="combobox" aria-autocomplete="list" aria-haspopup="true" aria-expanded="true" tabindex="11" aria-labelledby="select2-bka6-container" aria-owns="select2-bka6-results" aria-activedescendant="select2-bka6-result-vwdq-db"><span class="select2-selection__rendered" id="select2-bka6-container" title="db">db</span><span class="select2-selection__arrow" role="presentation"><b role="presentation"></b></span></span></span><span class="dropdown-wrapper" aria-hidden="true"></span></span>

</div>
</div>

Мы пробовали эти опции, но ни одна из них не работает,

#driver.find_element_by_xpath("/html/body/span/span").click()
    #driver.find_element_by_xpath("//*[@id=select2-7h5y-result-ycb2-csv]").click()
    #driver.find_element_by_id("id=select2-mrbe-container]").click()
    #driver.find_element_by_xpath("/html/body/section[3]/section[3]/section/form/div[1]/div/div/div[1]/section/div[3]/div[1]/div[1]/div[2]/div[6]/div[1]/div/select").click()
    select = Select(driver.find_element_by_xpath("//select[@data-input-id='attached_report_type']"))
    select.select_by_value("CSV").click()

Ответы [ 2 ]

0 голосов
/ 26 июня 2019

Поскольку вы разместили HTML, я думаю, что data-name="Report Type" является статическим и достаточно, чтобы найти целевой элемент select, потому что в метке HTML тоже самое.Вы должны использовать следующие локаторы с явным ожиданием :

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

wait = WebDriverWait(driver, 10)
  1. По cssSelector:

    element = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, "select[data-name='Report Type']")))
    
  2. По xpath:

    element = wait.until(EC.presence_of_element_located((By.XPATH, "//label[text()='Report Type']/following::select[@data-name='Report Type']")))
    

Теперь вы можете использовать любой из приведенных выше указателей стратегий, чтобы найти целевой элемент и работать с Select:

select = Select(element)
select.select_by_value("CSV").click()

Надеюсь, это поможет

0 голосов
/ 26 июня 2019

Пожалуйста, используйте ByTagName

driver.findElement(By.tagName("select"));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...