2013-08-27 28 views
0

我需要在包裝器div中獲取具有類的所有元素。我用PHP和CSS選擇以前做過這將是這個樣子:使用Java和Selen的css選擇器中的多個值

$this->elements($this->using('css selector')->value('div.active tr[class="theRow"]')); 

現在,這會給我包裝活躍中的所有元素富,但我不知道如何與Java做。我想,像這樣所有的webElements列表:

List<WebElement> list = driver.findElements(By.cssSelector(".active,.theRow")); 

然而,這會給我所有theRow元素,eaven這些活動外包裝紙。任何sugestions?

下面的代碼,也給所有theRow元素如預期:

List<WebElement> list = driver.findElements(By.className("theRow"));  

,但是這給了我一個空列表

List<WebElement> list = driver.findElements(By.cssSelector("tr[class='row-hover']"));  
+0

你爲什麼不使用原始定位器?'div.active span [class =「foo」]' – Arran

+0

因爲這給我留下了一個空的列表 – user1593846

+0

因此你需要給我們一些HTML,你正在運行這個。原始定位器是好的,它的工作原理是,你需要做什麼來得到你的問題所在,因此它顯然不符合它運行的HTML。 – Arran

回答

2

有機會跨度的階級屬性包含多個值嗎?

如果是這樣,那麼使用'class ='可能會遇到問題,因爲它不會匹配具有兩個或更多類的元素。

如果是這樣,那麼試試這個;

List<WebElement> list = driver.findElements(By.cssSelector("div.active span.foo")); 

當過我訪問類之外「」,我總是會用‘[類* =‘富’]’,因爲你不能保證在多個值出現在類屬性的順序,但會總是使用「。」符號儘可能。然而,無論何時我在Xpath中使用「class」,我總是使用「[contains(@ class,'foo')],因爲Xpath總是將」class「視爲字符串文字,而CSS」。「可以處理多個值

+0

那麼對象的完整類就像class =「theRow foo bar row 1」,如果我只是搜索foo部分的By.className不是問題,但是你說它是在使用cssSelector時? – user1593846

+1

是的,如果你使用「[class = foo]」,它只會選擇「class」作爲字符串等於「foo」的元素,因此不會匹配「class = foo bar」。使用「[class * = foo]」會匹配,因爲你說找到包含「foo」的「class」字符串的元素,但也會匹配「class = foobar」的元素。即使在「class」中有多個值,使用「.foo」也可以找到元素。 –

+0

通過安裝Firebug和Firepath並在Firefox中打開頁面進行實驗。它可以讓你測試XPath和CSS選擇器 –