我是Python Selenium的新手。我坚持这一点。请帮助我找到解决方案。 我正在尝试使用ActionChain单击此MENU1。
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中都尝试过。
谢谢
答案 0 :(得分:0)
所需元素是Angular元素,因此调用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