CSS-селектор создает исключение тайм-аута в сценарии Selenium - PullRequest
0 голосов
/ 31 января 2019

Traceback (последний вызов был последним): файл "C: \ Users \ PSWN672P \ AppData \ Local \ Programs \ Python \ Python37 \ Python Programs \ SNOW1.py", строка 17, в EC.element_to_be_clickable ((By.CSS_SELECTOR, 'ul [id * = "collapseId"]> li: nth-child (5)> ul [id * = "collapseId"]> li> div> a> div> div')) Файл "C:\ Users \ PSWN672P \ AppData \ Local \ Programs \ Python \ Python37 \ lib \ site-packages \ selenium \ webdriver \ support \ wait.py ", строка 80, до тех пор, пока не будет поднято TimeoutException (message, screen, stacktrace) selenium.common.exceptions.TimeoutException: Сообщение:

Попытка получить доступ к элементу с текстом как Мои группы работают и запустить сценарий, чтобы автоматически щелкнуть этот элемент и перейти к следующей странице:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.support.ui import WebDriverWait
from selenium.common.exceptions import TimeoutException
from selenium.webdriver.support import expected_conditions as EC
import time


browser=webdriver.Ie()
browser.get('http://example.com')

try:

    window_before=browser.window_handles[0]
    element=WebDriverWait(browser,10).until(EC.element_to_be_clickable((By.CSS_SELECTOR,'ul[id*="collapseId"]>li:nth-child(5)>ul[id*="collapseId"]>li>div>a>div>div')))
    element.click()
    time.sleep(15)
    window_after=browser.window_handles[1]
    browser.switch_to_window(window_after)

finally:

    browser.quit()

<a class="sn-widget-list-item sn-widget-list-item_hidden-action module-node" id="2ccb50dfc61122820032728dcea648fe" href="task_list.do?sysparm_userpref_module=2ccb50dfc61122820032728dcea648fe&amp;sysparm_query=assignment_group=javascript:getMyGroups()^active=true^assigned_to=^sys_class_name!=cert_follow_on_task^sys_class_name!=sc_req_item^sys_class_name!=sc_request^EQ&amp;sysparm_clear_stack=true" target="gsft_main"><div class="sn-widget-list-content" data-id="2ccb50dfc61122820032728dcea648fe">
    <div class="sn-widget-list-content" data-id="2ccb50dfc61122820032728dcea648fe">
        <div class="sn-widget-list-title">My Groups Work</div>
    </div>
</a>

Ответы [ 2 ]

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

Селектор CSS генерирует исключение тайм-аута, поскольку адаптированная вами стратегия Локатор не идентифицирует нужный элемент однозначно.Возможно TimeoutException является результатом неудачного ExpectedConditions .Тем не менее, для click() элемента с текстом «Работа моих групп» можно использовать следующее решение:

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

    element = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "a.sn-widget-list-item.sn-widget-list-item_hidden-action.module-node[href^='task_list.do?sysparm_userpref_module=']>div.sn-widget-list-content[data-id]>div.sn-widget-list-title")))
    

Альтернатива

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

    element = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//a[@class='sn-widget-list-item sn-widget-list-item_hidden-action module-node' and starts-with(@href,'task_list.do?sysparm_userpref_module=')]/div[@class='sn-widget-list-content' and (@data-id)]/div[@class='sn-widget-list-title' and contains(., 'My Groups Work')]")))
    

Примечание. Необходимо добавить следующие импорты:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
0 голосов
/ 31 января 2019

почему бы просто не найти элемент по имени класса?

element=WebDriverWait(browser,10).until(EC.element_to_be_clickable((By.CLASS_NAME,'sn-widget-list-title')))

...