使用Java和selenium的css选择器中的多个值

使用Java和selenium的css选择器中的多个值,java,selenium,css-selectors,selector,Java,Selenium,Css Selectors,Selector,我需要在包装器div中使用一个类获取所有元素。我以前使用php做过这项工作,css选择器的外观如下所示: $this->elements($this->using('css selector')->value('div.active tr[class="theRow"]')); 现在,这将使包装器中的所有foo元素都处于活动状态,但我不知道如何使用Java实现。我想要一个包含所有Web元素的列表,如下所示: List<WebElement> list = driv

我需要在包装器div中使用一个类获取所有元素。我以前使用php做过这项工作,css选择器的外观如下所示:

$this->elements($this->using('css selector')->value('div.active tr[class="theRow"]'));
现在,这将使包装器中的所有foo元素都处于活动状态,但我不知道如何使用Java实现。我想要一个包含所有Web元素的列表,如下所示:

List<WebElement> list = driver.findElements(By.cssSelector(".active,.theRow"));
List List=driver.findElements(By.cssSelector(“.active.theRow”);
然而,这将为我提供所有的row元素,这些元素位于活动包装器之外。有什么建议吗

下面的代码还提供了预期的所有以下元素:

List<WebElement> list = driver.findElements(By.className("theRow"));    
List List=driver.findElements(By.className(“theRow”);
但这给了我一个空列表

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

跨度的class属性是否可能包含多个值

如果是这样,那么使用“class=”可能会有问题,因为它与包含两个或多个类的元素不匹配

如果是,那么试试这个

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

当我访问“.”之外的类时,我总是使用“[class*='foo']”,因为您不能保证多个值在class属性中出现的顺序,但在可能的情况下总是使用“.”符号。然而,每当我在Xpath中使用“class”时,我总是使用“[contains(@class,'foo')”,因为Xpath总是将“class”视为字符串文字,其中将其视为CSS。“可以处理多个值”

为什么不使用原始定位器?
div.active span[class=“foo”]
因为这给我留下了一个空列表,所以您需要给我们一些运行此操作的HTML。您的原始定位器很好,它按照您的意愿工作,并且是您需要做的事情,以获得您的问题所谈论的内容。因此,它显然与运行此操作的HTML不匹配。是的,php cod正如java一样,e被应用于确切的html,php给了我正确的结果。此外,我在问题中编辑了一点代码,这是html,对象的完整类类似于class=“theRow foo bar row 1如果我使用By.className搜索foo部分不是问题,但您在使用cssSelector时说是这样?如果使用“[class=foo]”,它将只选择元素,其中“class”作为字符串等于“foo”,因此与“class=foo-bar”不匹配。使用“[class*=foo]”将匹配,因为您的意思是使用包含“foo”的“class”字符串查找元素,但这也将匹配“class=foobar”的元素。或者,通过安装Firebug和Firepath并在Firefox中打开页面,使用“.foo”将找到元素,即使“类”实验中有多个值。它可以让你测试XPath和CSS选择器。下课后的小星星正是我想要的!谢谢:DCool但正如我所说,这将在“foobar”和“foo”类中匹配。如果您只想匹配“foo”类,那么应该使用“tr.foo”而不是“tr[class*='fooo”