Jquery :包含带Selenium和Select2的选择器
我知道Selenium只支持浏览器支持的CSS选择器。在我的HTML应用程序中,我正在使用jQuery,但是:contains(str)仍然向我抛出一个无效或非法的字符串 指定的错误 我正在Select2组件中键入文本,等待10秒,然后尝试选择结果Jquery :包含带Selenium和Select2的选择器,jquery,selenium,jquery-select2,Jquery,Selenium,Jquery Select2,我知道Selenium只支持浏览器支持的CSS选择器。在我的HTML应用程序中,我正在使用jQuery,但是:contains(str)仍然向我抛出一个无效或非法的字符串 指定的错误 我正在Select2组件中键入文本,等待10秒,然后尝试选择结果 wd.findElement(By.id("s2id_autogen1")).sendKeys(p.getDisplayName()); // Wait 10 seconds wd.findElement(By.cssSelector(".sel
wd.findElement(By.id("s2id_autogen1")).sendKeys(p.getDisplayName());
// Wait 10 seconds
wd.findElement(By.cssSelector(".select2-result-label:contains('"+p.getDisplayName()+"')")).click();
为什么我仍然会犯这样的错误;有什么想法吗?谢谢大家!
更新:使用xpath不是一个选项。它必须使用CSS选择器来完成 使用xpath而不是css:
wd.findElement(By.xpath("//[@class='select2-result-label and contains(text(), '"+p.getDisplayName()+"')]")).click();
如果您试图避免使用xpath,可以尝试以下方法:
List<WebElement> elements = wd.findElements(By.cssSelector(".select2-result-label"));
WebElement temp;
foreach(WebElement element in elements)
{
if(element.getText().contains(p.getDisplayName())
temp = element;
}
List elements=wd.findElements(By.cssSelector(“.select2结果标签”);
网络元素温度;
foreach(元素中的WebElement)
{
if(element.getText()包含(p.getDisplayName())
温度=元素;
}
这是psuedo代码,因为我不完全确定您使用的是什么。使用xpath而不是css:
wd.findElement(By.xpath("//[@class='select2-result-label and contains(text(), '"+p.getDisplayName()+"')]")).click();
如果您试图避免使用xpath,可以尝试以下方法:
List<WebElement> elements = wd.findElements(By.cssSelector(".select2-result-label"));
WebElement temp;
foreach(WebElement element in elements)
{
if(element.getText().contains(p.getDisplayName())
temp = element;
}
List elements=wd.findElements(By.cssSelector(“.select2结果标签”);
网络元素温度;
foreach(元素中的WebElement)
{
if(element.getText()包含(p.getDisplayName())
温度=元素;
}
这是psuedo代码,因为我不完全确定您使用的是什么。您的更新提到这必须在CSS选择器中完成。嗯,它不能 您没有理解为什么不支持
contains
。contains
不是CSS选择器,也不是CSS选择器规范的一部分。之所以可以使用它,是因为Sizzle实现了它。Sizzle是一个开源库,是jQuery使用的选择器支持引擎
所以答案很简单,它不能使用原生CSS选择器来完成。你要么必须使用XPath(Richard的答案,顺便说一下,这是实现这一点的更好方法)或者使用JavaScript在页面上执行jQuery。毕竟,您可以这样做的唯一原因是因为Sizzle/jQuery,所以您仍然必须以某种方式使用它
下面是伪Java:
javascriptDriver = (JavaScriptExecutor)wd;
element = javascriptDriver.executeScript("return $(.select2-result-label:contains('"+p.getDisplayName()+"')");
(假设jQuery映射到$
函数,坦率地说,它应该是这样的)
XPath可以在本机上实现这一点,并且在需要的地方,Selenium将回到它自己的XPath实现(称为Wicked Good XPath的开源库)。如果您针对现代浏览器进行测试,您不应该有太多问题(即作为例外)。您的更新提到这必须在CSS选择器中完成。嗯,它不能 您没有理解为什么不支持
contains
。contains
不是CSS选择器,也不是CSS选择器规范的一部分。之所以可以使用它,是因为Sizzle实现了它。Sizzle是一个开源库,是jQuery使用的选择器支持引擎
所以答案很简单,它不能使用原生CSS选择器来完成。你要么必须使用XPath(Richard的答案,顺便说一下,这是实现这一点的更好方法)或者使用JavaScript在页面上执行jQuery。毕竟,您可以这样做的唯一原因是因为Sizzle/jQuery,所以您仍然必须以某种方式使用它
下面是伪Java:
javascriptDriver = (JavaScriptExecutor)wd;
element = javascriptDriver.executeScript("return $(.select2-result-label:contains('"+p.getDisplayName()+"')");
(假设jQuery映射到$
函数,坦率地说,它应该是这样的)
XPath可以在本机上实现这一点,并且在需要的地方,Selenium将回到它自己的XPath实现(称为Wicked Good XPath的开源库)。如果您针对现代浏览器进行测试,您不应该有太多问题(即作为例外).抱歉,我应该提到我之所以避免使用xpath,是因为我面临跨浏览器问题。但是,是的,我已经读到您展示的xpath解决方案应该可以完美工作。抱歉,我应该提到我之所以避免使用xpath,是因为我面临跨浏览器问题。但是,是的,我已经读到您展示的xpath解决方案应该ld工作得很好。谢谢你的解释。我正在测试IE,这是我不使用xpath的方式。gah…回答了为什么CSS不工作的问题,并指出了规范,但你比我快!没有先阅读你的
:)
谢谢你的解释。我正在测试IE,这是我不使用xpath的方式。gah…回答了为什么CSS不工作的问题,并注意到了规范,但你比我快!没有先阅读你的:)