簡體   English   中英

帶有硒的Python:無法找到元素

[英]Python with selenium: unable to locate element

我一直試圖定位到以下元素:

<input type="text" ng-change="vm.refreshTimeline()" button-enter="vm.filterRowChange();" ng-model="vm.filterRowValue" class="ng-pristine ng-untouched ng-valid ng-empty">

它是一個搜索框

我嘗試使用類名,xpath,css選擇器,但這些都不起作用。 仍然我與各自的屬性“ 無法找到元素 ”。

driver.find_element_by_css_selector('body > div:nth-child(1) > div.uiview.ng-scope > div.container.asset-details.ng-scope > div.row.top-buffer > div > div.GanttController > div.input-append.text-center.search_section.ng-scope > input')

driver.find_element_by_class_name('ng-pristine ng-untouched ng-valid ng-empty')

  find_element_by_xpath('/html/body/div[1]/div[2]/div[1]/div[4]/div/div[2]/div[1]/input')

find_element_by_link_text('Search by Equipment ID or S/N')

我什至嘗試使用xpath助手來查找確切的xpath,但是它顯示錯誤為:

[INVALID XPATH EXPRESSION]

幫助我克服這個問題。

提前致謝。

所需元素是Angular元素,因此要定位該元素,必須使WebDriverWait 變為可單擊元素,並且可以使用以下任一解決方案:

  • 使用CSS_SELECTOR

     element = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input.ng-pristine.ng-untouched.ng-valid.ng-empty[ng-change*='refreshTimeline']"))) 
  • 使用XPATH

     element = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//input[@class='ng-pristine ng-untouched ng-valid ng-empty' and contains(@ng-change,'refreshTimeline')]"))) 
  • 注意 :您必須添加以下導入:

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

讓我們設置隱式等待超時:

driver.manage().timeouts().implicitlyWait(60, TimeUnit.SECONDS);

可能需要太多時間來執行所有操作,並且需要等待才能保證所有元素的完整。

有關更多信息: 等待超時硒

暫無
暫無

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

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