Selenium WebDriver问题与cssSelector

时间:2011-10-25 10:47:44

标签: selenium css-selectors webdriver selenium-rc

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

Selenium RC:

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

绝对正常。

Selenium WebDriver:

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

哪个不起作用。 我正在使用:selenium-server-standalone-2.9.0.jar和Firefox 5.0版。任何人都可以帮我弄清楚cssSelector无法使用WebDriver的原因吗?

2 个答案:

答案 0 :(得分:8)

'Contains'已从CSS 3弃用.Webdriver支持浏览器本机支持的任何内容。它适用于selenium 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();

答案 1 :(得分:0)

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