我有一个子菜单项,我以前可以通过selenium web navigation访问。现在我不断收到以下错误:"您只能与可见元素进行交互"。我已经尝试了许多建议(等待,隐式/显式,最大化窗口,使用ActionChain对象)但没有成功。任何人都可以通过查看以下HTML和代码来了解为什么这个元素会保持不可见?:
<ul class="nav" >
<li>
<a href="/edc">EDC</a>
</li>
</ul>
<ul class="nav" >
<li>
<a href="/qa/main">Queries</a>
</li>
</ul>
<ul class="nav" >
<li>
<a href="/docs">Docs</a>
</li>
</ul>
<ul class="nav" >
<li>
<a href="/data">Data</a>
</li>
</ul>
<ul class="nav" >
<li>
<a href="/aal/main">Audit Log</a>
</li>
</ul>
<ul class="nav" >
<li>
<a href="/summaries/main">Reports</a>
</li>
</ul>
<ul class="nav" >
<li class="dropdown ">
<a href="#" class="dropdown-toggle" data-toggle="dropdown">Tools <b class="caret"></b></a>
<ul class="dropdown-menu">
<li>
<a href="/sql">SQL Worksheet</a>
</li>
<li>
<a href="/meddra">Meddra</a>
</li>
<li>
<a href="/sae">SAE</a>
</li>
<li>
<a href="/pdf">Worksheets</a>
</li>
<li>
<a href="/pipelines/report">Pipelines</a>
</li>
<li>
<a href="/tools/sync">Sync</a>
</li>
<li>
<a href="/db">Project Management</a>
</li>
<li>
<a href="/rss">RSS</a>
</li>
<li>
<a href="/ipt/main">IPT</a>
</li>
<li>
<a href="/images/main">Images</a>
</li>
</ul>
</li>
</ul>
这是不起作用的python代码片段:
try:
menu_item = driver.find_element(By.LINK_TEXT, 'Tools')
actions = ActionChains(driver)
actions.click(menu_item).perform()
except Exception as error:
print ("Tools menu not found: " + str(error))
try:
wait = WebDriverWait(driver, 10) wait.until(EC.presence_of_element_located(By.XPATH("/html/body/header/div/div/div/div/ul[7]/li/ul/li[9]/a")));
ipt_menu_item = driver.find_element(By.XPATH, "/html/body/header/div/div/div/div/ul[7]/li/ul/li[9]/a")
actions.click(ipt_menu_item).perform()
except Exception as error:
print ("Tools | IPT link not found: " + str(error))
答案 0 :(得分:1)
我几次处理过同样的问题,我发现大多数时候你可以先移动到元素然后发出.click()命令:
Element = driver.find_element_by_link_text('link')
actions = ActionChains(driver)
# try this
actions.move_to_element(Element)
# or this
driver.execute_script("return arguments[0].scrollIntoView();", Element)
Element.click()
编辑:
或者,第三个选项用于点击以防前两个不起作用,如果你可以获得带有selenium的元素并且元素在视图中,但是只是无法与它交互,那么它可能在<div
后面那是不可见的。试试这次点击而不是正常的.click():
driver.execute_script("arguments[0].click()", Element)
如果这不起作用,您可能需要尝试与属性进行交互,以便在进行点击之前使元素处于硒的可见性状态,例如:
driver.execute_script("arguments[0].style.display = 'block'", Element)