Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery :包含带Selenium和Select2的选择器_Jquery_Selenium_Jquery Select2 - Fatal编程技术网

Jquery :包含带Selenium和Select2的选择器

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

我知道Selenium只支持浏览器支持的CSS选择器。在我的HTML应用程序中,我正在使用jQuery,但是:contains(str)仍然向我抛出一个无效或非法的字符串 指定的错误

我正在Select2组件中键入文本,等待10秒,然后尝试选择结果

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不工作的问题,并注意到了规范,但你比我快!没有先阅读你的
:)