Невозможно установить флажок получения исключения тайм-аута

У меня есть следующий html-код, я не могу установить флажок.

<table style="overflow:hidden;" cellpadding="0" cellspacing="0" border="0" role="presentation" class="table-header">
<tbody>
 <tr>
  <td class="cell-container cell-container-0 cell-selector locked xwtTable_1562932879200_0" role="presentation" columnidx="0" style="vertical-align: middle;width: 0px;" tabindex="0" aria-readonly="true">
    <div class="cell cell-0 ellipsis no-wrapping cell-selector ellipsis no-wrapping xwtTable_1562932879200_0" role="columnheader" style="text-align: center;" title="">
    <div tabindex="0" class="xwtSelectAll dijitCheckBox" "="" style="visibility:visible">
          <input type="checkbox" class="select-all" style="visibility:visible">
    </div>
 </div>
</td>
</tr>
</tbody></table>

Я получаю исключительное время:

element = wait.until (EC.element_to_be_clickable ((By.XPATH, "// div // input [@ class = 'select-all']")))

ОШИБКА [338.067268s]: test_login (main .TestHome)

Отслеживание (последний вызов последним): файл "TestHome.py", строка 55, в test_login s.filterclick () Файл "C: / Users / rakadali / PycharmProjects / CMM1 \ Pageobjects \ searchdevice.py", строка 25, в filterclick WebDriverWait (self.driver, 20) .until (EC.element_to_be_clickable ((By.XPATH, "// table [@ class = 'table-header'] / tbody / tr / td // div [contains (@class, ') dijitCheckBox ')] / input [@ class =' ​​select-all '] "))). click () Файл" C: \ Program Files (x86) \ Python37-32 \ lib \ site-packages \ selenium \ webdriver \ support \ wait.py ", строка 80, до тех пор, пока не возникнет исключение TimeoutException (сообщение, экран, трассировка стека) selenium.common.exceptions.TimeoutException: Сообщение:

ниже код:

def filterclick(self):

    try:
        wait = WebDriverWait(self.driver, 80)
        element =wait.until(EC.element_to_be_clickable((By.XPATH, "//div//input[@class='select-all']")))
        element.click()
    finally:
        self.driver.close()

я хочу установить флажок


person Rajani    schedule 15.07.2019    source источник


Ответы (4)


Попробуйте следовать xpath, чтобы установить флажок.

WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.XPATH,"//table[@class='table-header']//tr//td//input[@class='select-all']"))).click()
person KunduK    schedule 15.07.2019

Чтобы установить этот флажок, вам нужно вызвать WebDriverWait для желаемого element_to_be_clickable(), и вы можете использовать следующее Стратегии поиска:

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

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "table.table-header>tbody>tr>td div.dijitCheckBox>input.select-all"))).click()
    
  • Использование XPATH:

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//table[@class='table-header']/tbody/tr/td//div[contains(@class, 'dijitCheckBox')]/input[@class='select-all']"))).click()
    
  • Примечание. Вам необходимо добавить следующий импорт:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    
person DebanjanB    schedule 15.07.2019
comment
Можете ли вы обновить вопрос с помощью трассировки стека ошибок? - person DebanjanB; 15.07.2019

Возможно, флажок недоступен, поскольку он перекрывается с другим объектом, то есть родительским div, попробуйте удалить явное ожидание и попытку чтобы установить флажок, например:

driver.find_elements_by_xpath("input[@class='select-all']").click()

WebDriver должен сообщить об ошибке, указав, почему элемент нельзя щелкнуть, что должно дать вам представление об элементе, который получил щелчок.

Вы также можете попробовать щелкнуть родительский div, например:

element =wait.until(EC.element_to_be_clickable((By.XPATH, "//input[@class='select-all']/parent::div")))

Ознакомьтесь с осями XPath и статьи об операторах и функциях XPath, чтобы узнать больше о создании сложных локаторов XPath

Другие вещи, которые следует учитывать:

person Dmitri T    schedule 15.07.2019
comment
попробовал с этим драйвером. find_element_by_xpath (input [@ class = 'select-all']). click (), говоря, что нет такого исключения элемента - person Rajani; 15.07.2019

строка 25, в filterclick WebDriverWait (self.driver, 20) .until (EC.element_to_be_clickable ((By.XPATH, "// table [@ class = 'table-header'] / tbody / tr / td // div [contains (@class, 'dijitCheckBox')] / input [@ class = 'select-all'] "))). click ()

Кажется, что вы используете абсолютный xpath, который может измениться во время выполнения, и поэтому флажок больше не отображается с этим xpath. Исключение очень очевидно. В нем говорится: «Я ждал этого флажка последние 80 секунд, но он не отображался в пользовательском интерфейсе, и теперь я закончил его ждать». Просто убедитесь, что элемент доступен в пользовательском интерфейсе в течение заданного времени и доступен для поиска с помощью правильного селектора, который вы предоставили.

person NiNa    schedule 15.07.2019