Как нажать на изображение через Selenium с помощью Python - PullRequest
0 голосов
/ 18 января 2019

Однако я пытался выбрать один тег изображения, поскольку у него нет имени и идентификатора. У меня проблемы при выполнении того же.

HTML:

<tr __gwt_row="0" __gwt_subrow="0" class="GPBYFDECG">
<td class="GPBYFDEBG GPBYFDEDG GPBYFDEEG datagridCellStyle">
    <div style="outline-style:none;" __gwt_cell="cell-gwt-uid-29">
        ACD DETAILS NEW
    </div>
</td>
<td class="GPBYFDEBG GPBYFDEDG datagridCellStyle">
    <div style="outline-style:none;" __gwt_cell="cell-gwt-uid-30">
        ACD Details
    </div>
</td>
<td class="GPBYFDEBG GPBYFDEDG GPBYFDEOG datagridCellStyle">
    <div style="outline-style:none;" __gwt_cell="cell-gwt-uid-31" tabindex="0">


        //IMAGE THAT I NEED TO SELECT AND CLICK
        <img onload="this.__gwtLastUnhandledEvent=&quot;load&quot;;" src="http://172.00.00.00:8080/demoreports/DemoReportsApp/clear.cache.gif" style="width:25px;height:23px;background:url(http://172.00.00.00:8080/demoreport/DemoReportsApp/0210CFCB6CBE82D7E9FAC82D9F901495.cache.png) no-repeat -333px 0px;" border="0">
    </div>
</td>

Код:

driver.find_element_by_xpath('//img[@onload="this.__gwtLastUnhandledEvent=&quot;load&quot;;"]').click()

Выше код не работает. Есть ли другой способ, я могу нажать () на этом img, так как он генерирует отчёты, представленные в формате javscript.

1 Ответ

0 голосов
/ 19 января 2019

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

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

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "td.datagridCellStyle img[onload*='gwtLastUnhandledEvent'][src*='demoreports/DemoReportsApp/clear']"))).click()
    
  • Использование XPATH:

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//td[contains(@class, 'datagridCellStyle')]//img[contains(@onload, 'gwtLastUnhandledEvent') and contains(@src, 'demoreports/DemoReportsApp/clear')]"))).click()
    
  • Примечание : необходимо добавить следующие операции импорта:

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