2011-10-25 62 views
4

我想点击一个按钮,使用Selenium 2.0 WebDriver中的CSS选择器。问题是我能够使用Selenium RC运行的脚本与WebDriver不兼容。 代码:Selenium WebDriver问题与cssSelector

硒RC:

selenium.click("css=.gwt-Button:contains('Run Query')"); 

这工作绝对没问题。

硒的webdriver:

driver.findElement(By.cssSelector(".gwt-Button:contains('Run Query')")).click(); 

不工作。 我正在使用:selenium-server-standalone-2.9.0.jar和Firefox 5.0版本。任何人都可以帮我弄清楚为什么cssSelector不适用于WebDriver?

+0

你能证明你尝试选择 – CBRRacer

+0

<按钮类型=“按钮”类=“GWT-按钮” ID =“EXT-gen362”>元素运行查询但我不能使用ID因为这是动态genaratetd。 – Swagatika

+0

@Swagatika:id是动态生成的。 id的全文是动态生成的吗?或者是动态生成的id的最后部分?这里id =“ext-gen362”。如果ext-gen是固定的,并且只有值(362)正在更改,则可以使用带有contains或starts-with的xpath –

回答

8

'Contains'已被CSS 3弃用。Webdriver支持浏览器原生支持的任何内容。它在硒RC中起作用,因为RC使用Sizzle库作为CSS选择器并支持'contains'。你是否尝试过类似的方式,

WebElement element = driver.findElement(By.cssSelector(".gwt-Button[type='button']"); 
element.click(); 

如果这不是唯一的,那么也许你可能需要进一步过滤它。如果您的网站使用jQuery,那么您可以使用jQuery的'contains'选择器。

JavascriptExecutor js = ((JavascriptExecutor)driver); 
WebElement element = (WebElement) js.executeScript("return $(\".gwt-Button:contains('Run Query')\")[0];"); 
element.click(); 
+0

感谢您的回复。是的,我可以通过注入嘶嘶声的库来使它工作。 – Swagatika

+1

如果你的应用程序使用jQuery,那么你可能不需要注入sizzle库并污染DOM。 AFAIK,sizzle被用作jQuery的CSS选择器引擎。在那种情况下,我提到的第二种解决方案可能会很好。 – nilesh

+0

是的,问题是我的应用程序不使用JQuery,这就是为什么我必须单独使用Sizzle并使contains()方法工作。非常感谢你的帮助。 – Swagatika

0

该语法看起来有效,当我在测试页上删除了一些元素,然后去了我的控制台并执行了$(“.gwt-Button:contains('Run Query')”)。我改变了按钮的文字。所以我唯一能想到的就是可能有一个运行查询按钮存在于页面上,但没有显示出来,所以你得到了运行时异常。您可能希望在点击它之前检查它是否显示。或者创建一个元素列表,然后删除所有隐藏的(display == false)元素。