Expected_Conditions возвращает TimeoutException при использовании метода element_to_be_clickable через selenium & python 3 - PullRequest
0 голосов
/ 09 мая 2018

Я пытаюсь автоматизировать работу с селеном и питоном 3, ниже приведен код, который я пробовал:

element = WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.XPATH, '//*[@id="download"]/span'))
)
element.click()

HTML:

<a href="javascript:void(0);" 
onclick="if(!alen_Button_checkClick('download',event)){return true;};return 
htmlbSL(this,2,'download:downloadBtn')" 
onkeypress="if(!alen_Button_checkClick('download',event)){return 
true;};return htmlbSL(this,2,'download:downloadBtn')" class="urBtnStd1 urV" 
id="download" ct="Button" title="Download To Excel" style="white- 
space:nowrap;">
    <span class="urBtnPadding">
        Download To Excel
    </span>
</a>

Я хочу нажать кнопку «Загрузить в Excel», но каждый раз, когда я выполняю код, независимо от того, выполняю ли я поиск по xpath или классу, он не выполняется и выдает ошибку времени ожидания, когда я увеличиваю время ожидания, это не помогает или я использую Driver.wait это тоже не помогает.

трассировка стека:

EC.element_to_be_clickable((By.XPATH, '//*[@id="download"]/span'))
  File "c:\program files (x86)\python36-32\lib\site-packages\selenium\webdriver\support\wait.py", line 80, in until
    raise TimeoutException(message, screen, stacktrace)
  selenium.common.exceptions.TimeoutException: Message

Что мне здесь не хватает?

РЕДАКТИРОВАТЬ 2:

time.sleep(5)
if driver.find_element_by_id('download'):
    print ("Element exists")
time.sleep(5)
if driver.find_element_by_xpath((("//a[@class='urBtnStd1 urV' and @id='download' and @title='Download To Excel']/span[@class='urBtnPadding']"))):
    print ("Element exists1")

Стек редактирования 2:

Element exists
Traceback (most recent call last):
  File "C:\Users\c5242046\Desktop\test2\backupautomation\bkpalertv1\bkpv1.py", line 73, in <module>
    if driver.find_element_by_xpath((("//a[@class='urBtnStd1 urV' and @id='download' and @title='Download To Excel']/span[@class='urBtnPadding']"))):
  File "c:\program files (x86)\python36-32\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 385, in find_element_by_xpath
    return self.find_element(by=By.XPATH, value=xpath)
  File "c:\program files (x86)\python36-32\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 955, in find_element
    'value': value})['value']
  File "c:\program files (x86)\python36-32\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 312, in execute
    self.error_handler.check_response(response)
  File "c:\program files (x86)\python36-32\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 242, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoSuchElementException: Message: Unable to find element with xpath == //a[@class='urBtnStd1 urV' and @id='download' and @title='Download To Excel']/span[@class='urBtnPadding']

1 Ответ

0 голосов
/ 09 мая 2018

Чтобы щелкнуть элемент с текстом как Загрузить в Excel , вам нужно вызвать WebDriverWait и использовать любую из следующих опций:

  • CSS_SELECTOR:

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "a.urBtnStd1.urV#download[title='Download To Excel']>span.urBtnPadding"))).click()
    
  • XPATH:

    WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "//a[@class='urBtnStd1 urV' and @id='download' and @title='Download To Excel']/span[@class='urBtnPadding']"))).click()
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...