簡體   English   中英

無法使用Python和Selenium自動執行點擊

[英]Unable to automate a click using Python and Selenium

我正在嘗試自動將需求添加到TestLink數據庫。 我在嘗試點擊此錨點/跨度時遇到問題。

<a hidefocus="on" class="x-tree-node-anchor" href="javascript:REQ_SPEC_MGMT(17473)" tabindex="1">
<span unselectable="on" id="extdd-6">0:Project-0 (0)</span>
</a>

這是我嘗試過的事情的Python代碼部分:

anchor = browser.find_element_by_xpath('//a[contains(@href, "REQ_SPEC_MGMT")]')
span = anchor.find_element_by_xpath('.//span')

anchor.click()  # Doesn't work
span.click()    # Doesn't work
browser.execute_script("arguments[0].click();", anchor)  # Doesn't work
browser.execute_script("arguments[0].click();", span)    # Doesn't work

我沒有收到任何錯誤,但是仍然沒有得到手動單擊鏈接時出現的頁面。 我驗證了通過轉儲屬性找到正確的錨點/跨度,因此我知道我具有正確的元素。 我還嘗試了長時間的停頓,只是為了確保在嘗試之前可以單擊該元素。 關於我在做什么錯的任何想法嗎? 謝謝!

更新-這是HTML的較大部分:

<div id="tree_div" style="overflow:auto; height:100%;border:1px solid #c3daf9;" class=" x-panel x-tree">
<div class="x-panel-bwrap" id="ext-gen12"><div class="x-panel-body x-panel-body-noheader" id="ext-gen13" style="overflow: auto;">
<ul class="x-tree-root-ct x-tree-arrows" id="ext-gen14">
<li class="x-tree-node"><div ext:tree-node-id="17472" class="x-tree-node-el x-unselectable x-tree-node-expanded" unselectable="on" id="extdd-1">
<span class="x-tree-node-indent"></span>
<img alt="" src="http://192.168.11.111/third_party/ext-js/images/default/s.gif" class="x-tree-ec-icon x-tree-elbow-end-minus">
<img alt="" src="http://192.168.11.111/third_party/ext-js/images/default/s.gif" class="x-tree-node-icon" unselectable="on" id="extdd-2">
<a hidefocus="on" class="x-tree-node-anchor" href="javascript:TPROJECT_REQ_SPEC_MGMT(17472)" tabindex="1">
<span unselectable="on" id="extdd-3">ProjTasks (0)</span>
</a>
</div>
<ul class="x-tree-node-ct" style="">
<li class="x-tree-node">
<div ext:tree-node-id="17473" class="x-tree-node-el x-unselectable folder x-tree-node-collapsed" unselectable="on" id="extdd-4">
<span class="x-tree-node-indent"><img alt="" src="http://192.168.11.111/third_party/ext-js/images/default/s.gif" class="x-tree-icon"></span>
<img alt="" src="http://192.168.11.111/third_party/ext-js/images/default/s.gif" class="x-tree-ec-icon x-tree-elbow-plus">
<img alt="" src="http://192.168.11.111/third_party/ext-js/images/default/s.gif" class="x-tree-node-icon" unselectable="on" id="extdd-5">
<a hidefocus="on" class="x-tree-node-anchor" href="javascript:REQ_SPEC_MGMT(17473)" tabindex="1">
<span unselectable="on" id="extdd-6">0:Project-0 (0)</span></a></div><ul class="x-tree-node-ct" style="display:none;">
</ul>
</li>

首先,嘗試使用隱式硒等待,以確保所有元素都已下載。

anchor = WebDriverWait(browser,30).until(EC.element_to_be_clickable((By.XPATH, '//a[contains(@href, "REQ_SPEC_MGMT")]')))
span = WebDriverWait(anchor,30).until(EC.element_to_be_clickable((By.XPATH, './/span')))

如果工作不正常,請嘗試在href中執行js腳本:

browser.execute_script("javascript:REQ_SPEC_MGMT(17473)") 

要么

browser.execute_script(anchor.get_attribute("href")) 

我發現了問題。 我傳遞給execute_script的某些字符已被我的vnc軟件刪除( Python Selenium腳本會刪除鍵,但僅在VNC上使用時才刪除 )。

要在文本為0的元素上click() :Project-0(0)元素是啟用了JavaScript的元素,因此要在該元素上click() ,必須為element_to_be_clickable()誘導WebDriverWait ,並且可以使用以下任一方法解決方案:

  • 使用CSS_SELECTOR

     WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "ax-tree-node-anchor[href*='REQ_SPEC_MGMT']>span[id^='extdd-']"))).click() 
  • 使用XPATH

     WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//a[@class='x-tree-node-anchor' and contains(@href, 'REQ_SPEC_MGMT')]/span[starts-with(@id, 'extdd-') and text()='0:Project-0 (0)']"))).click() 
  • 注意 :您必須添加以下導入:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM