2015-02-09 68 views
4

標籤的結構的截圖顯示如何在硒測試中選擇第一個鋰元素?

enter image description here

我試圖用這個Python代碼來訪問第一li元素:

invitations = elem.find_element_by_css_selector('members-holder li#invitation-holder > :first-child') 

elem是一個非常頂級元素包含所有標籤

我得到這個例外:

NoSuchElementException: Message: Unable to locate element: {"method":"css selector","selector":"members-holder li#invitation-holder > :first-child"} 

我嘗試了一些變化,但無法得到我想要的結果。選擇該元素的最佳方式是什麼?

編輯

我試圖在鉻替代CSS選擇.members-holder .invitation-holder:first-child在開發者控制檯和它的作品。但是當我將它插入python selenium代碼時,拋出了相同的異常。

+0

我認爲這是el.find,不elem.find – 2015-02-09 06:26:35

+0

這是任何下架/ IFRAME?還是需要時間來加載? – 2015-02-09 06:30:17

+0

@VivekSingh你有一個很好的觀點!它在一開始就隱藏起來 – 2015-02-09 06:32:24

回答

3

首先,你應該確定你的CSS選擇器:

.members-holder ul li.invitation-holder 

而且,由於你首先需要的li,只需使用find_element_by_css_selector() method

driver.find_element_by_css_selector('.members-holder ul li.invitation-holder') 

除此之外,您可能需要到e xplicitly wait for the element to become visible

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

... 
element = WebDriverWait(driver, 10).until(
    EC.visibility_of_element_located((By.CSS_SELECTOR, ".members-holder ul li.invitation-holder")) 
) 

如果你仍然得到一個異常試圖到達元素,檢查元素是否是一個iframe內 - 如果是,先切換到它:

frame = driver.find_element_by_id('frame_id') 
driver.switch_to.frame(frame) 

# find the element 
+0

'switch_to.frame('id')'提示特別有用! – ccpizza 2017-10-06 13:12:02

3

嘗試使用這種方法識別元素。

WebElement parentDiv = driver.findElement(By.className("'members-holder")); 

現在就做

WebElement ul = parentDiv.findElement(By.tagName("ul")); 
List<WebElement> lis = ul.findElements(By.tagName("li")); 

第一個元素是

lis.get(0); 

這是Java代碼。你可以在Python中鍛鍊平衡。 希望它有幫助。

+0

WebElement ul = parentDiv.findElements(By.tagName(「ul」));'返回一個SINGLE元素嗎?它應該返回一個列表 – Saifur 2015-02-13 17:35:15

+1

我的錯誤。我糾正了它。希望能幫助到你。 @Saifur感謝你指出。 – 2015-02-15 02:10:59

+0

我知道這是一個錯字。 upvote糾正。 – Saifur 2015-02-15 02:15:01

相關問題