Как нажать на элемент через Selenium ActionChain и Python - PullRequest
0 голосов
/ 10 декабря 2018

Я новичок в Python Selenium.Я застрял с этим.Пожалуйста, помогите мне в поиске решения.Я пытаюсь щелкнуть это МЕНЮ1 с помощью ActionChain.

locator = (By.XPATH, "//div[@title='MENU1']")
text_element = WebDriverWait(driver, 20).until(visibility_of_element_located(locator))
actions = ActionChains(driver)
actions.move_to_element(text_element).click().perform()

Ниже приведен HTML-код:

<div _ngcontent-c0="" class="hyd-group-tree-node-label active" tooltipposition="bottom" title="MENU1">
    <span _ngcontent-c0="" class="ui-treenode-inner-icon fa fa-fw fa-building"></span>
    MENU1
</div>

Все работает нормально.Нет ошибокОн перемещается к элементу, но я не вижу движения щелчка.Я не уверен, что мне не хватает.Я пытался с text_element.click(), но он не работает.Я пробовал и в Chrome, и в Firefox.

Спасибо

1 Ответ

0 голосов
/ 12 декабря 2018

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

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

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "div.hyd-group-tree-node-label.active[title='MENU1']>span.ui-treenode-inner-icon.fa.fa-fw.fa-building"))).click()
    
  • Использование XPATH:

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//div[@class='hyd-group-tree-node-label active' and @title='MENU1']/span[@class='ui-treenode-inner-icon fa fa-fw fa-building']"))).click()
    

Если вы все еще хотите использовать ActionChains , вы можете использовать любое из следующих решений:

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

    ActionChains(driver).move_to_element(WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "div.hyd-group-tree-node-label.active[title='MENU1']>span.ui-treenode-inner-icon.fa.fa-fw.fa-building")))).click().perform()
    
  • Использование XPATH:

    ActionChains(driver).move_to_element(WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//div[@class='hyd-group-tree-node-label active' and @title='MENU1']/span[@class='ui-treenode-inner-icon fa fa-fw fa-building']")))).click().perform()
    
  • Примечание. Необходимо добавить следующие операции импорта:

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