Selenium WebDriver与cssSelector一起出现问题

Selenium WebDriver与cssSelector一起出现问题,selenium,css-selectors,webdriver,selenium-rc,Selenium,Css Selectors,Webdriver,Selenium Rc,我正在尝试使用Selenium 2.0 WebDriver中的CSS选择器单击一个按钮。问题是我能够使用Selenium RC运行的脚本不能与WebDriver一起使用。 代码: 硒RC: selenium。单击(“css=.gwt按钮:包含('runquery')”); 这绝对是个好办法 Selenium Web驱动程序: driver.findelelement(By.cssSelector(.gwt按钮:contains('runquery')))。单击(); 这是行不通的。 我正在使

我正在尝试使用Selenium 2.0 WebDriver中的CSS选择器单击一个按钮。问题是我能够使用Selenium RC运行的脚本不能与WebDriver一起使用。 代码:

硒RC:

selenium。单击(“css=.gwt按钮:包含('runquery')”);
这绝对是个好办法

Selenium Web驱动程序:

driver.findelelement(By.cssSelector(.gwt按钮:contains('runquery')))。单击();
这是行不通的。
我正在使用:selenium-server-standalone-2.9.0.jar和Firefox版本5.0。有人能帮我弄清楚为什么
cssSelector
不能与WebDriver一起使用吗?

当我在测试页面上删除一些元素,然后转到控制台并执行$(“.gwt Button:contains('Run Query'))时,语法看起来是有效的。当我更改按钮的文本时,长度得到了1。所以我能想到的唯一一件事是,你可能有一个运行查询按钮,它存在于页面上,但没有显示,因此你得到了运行时异常。在单击它之前,您可能需要检查它是否显示。或者创建一个元素列表,然后删除所有隐藏的(display==false)元素。

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();

您能否显示您试图选择的元素Run Query,但我不能使用ID,因为它是动态生成的。@Swagatika:ID是动态生成的。id的全文是否动态生成?或者id的最后部分是动态生成的?此处id=“ext-gen362”。如果ext gen是固定的,并且只更改了值(362),那么可以使用包含或以开头的xpath作为回复的hanks。是的,我可以通过注入sizzle库来实现它。如果您的应用程序使用jQuery,那么您可能不需要注入sizzle库并污染DOM。另外,sizzle被用作jQuery的CSS选择器引擎。在这种情况下,我提到的第二个解决方案可以很好地解决问题。是的,问题是我的应用程序没有使用JQuery,这就是为什么我必须单独使用Sizzle并使contains()方法工作的原因。非常感谢你的帮助。