CSS 使用 Selenium WebDriver 的带有 contains() InvalidSelectorException 的定位器
CSS Locator with contains() InvalidSelectorException using Selenium WebDriver
我正在学习 Selenium Webdriver 并尝试编写一个简单的测试脚本。
目的是在Gmail页面获取About Google
link,以练习CSS 定位符.
代码如下:
public class GoogleSearch {
public static void main(String[] args) {
WebDriver driver = new FirefoxDriver();
driver.get("https://www.gmail.com");
WebElement aboutGoogle = driver.findElement(By.cssSelector("a:contains('About Google')"));
driver.close();
driver.quit();
}
}
我得到下面提到的异常:
Exception in thread "main" org.openqa.selenium.InvalidSelectorException: The given selector a:contains('About Google') is either invalid or does not result in a WebElement. The following error occurred:
InvalidSelectorError: An invalid or illegal selector was specified
Command duration or timeout: 356 milliseconds
For documentation on this error, please visit: http://seleniumhq.org/exceptions/invalid_selector_exception.html
Build info: version: '2.45.0', revision: '32a636c', time: '2015-03-05 22:01:35'
System info: host: 'XXXXX', ip: '127.0.1.1', os.name: 'Linux', os.arch: 'amd64', os.version: '3.13.0-49-generic', java.version: '1.7.0_79'
*** Element info: {Using=css selector, value=a:contains('Need')}
Session ID: 0f1869f8-c59a-4f61-b1c7-b34ada42573f
Driver info: org.openqa.selenium.firefox.FirefoxDriver
我已经检查并能够使用相同的定位器在 Selenium IDE 中找到该元素。
我在某处读到 findElement()
方法正在返回一个 DOM 节点 并且代码期待WebElement 对象。
如果是这样的话,有没有workaround/casting?
有什么建议吗?
因为异常清楚地说明这里的问题是您的 Css 选择器无效。 '您正在尝试获取 About Google
锚标记 基于它的文本,该文本不是有效的 css 选择器 '。它更像是一个 jQuery 选择器。
您可以使用基于 href 属性值的选择器,如下所示,它将正常工作。
#footer-list a[href*='about']
并像
一样使用它
WebElement aboutGoogle = driver.findElement(By.cssSelector("#footer-list a[href*='about']"));
主要问题出在这一行:
driver.findElement(By.cssSelector("a:contains('About Google')"));
css
不为 Selenium WD 维护 contains()
- See here.
要使用 contains()
,您必须使用 Xpath。
使用 Xpath 您的定位器将是:
//a[contains(text(), 'About Google')]
对于驱动程序,它将是:
driver.findElement(By.xpath("//a[contains(text(), 'About Google')]"));
要查找 与 Selenium 的链接,您可以使用:
driver.findElement(By.linkText("your link name here"));
与Xpath[=相比,CSS选择器的限制59=]:
- 你不能用 CSS 选择器获取父元素(Xpath 有 XPath 轴)
- 您不能使用包含(这只是 XPath 权限)。
顺便说一句
要处理来自页面的 Xpath 定位器,您可以使用 Firefox 浏览器的扩展程序:
CssSelector
在脚本中不起作用,但在 selenium IDE.
中有效
在gmail这样的网站上工作也不好。
我正在学习 Selenium Webdriver 并尝试编写一个简单的测试脚本。
目的是在Gmail页面获取About Google
link,以练习CSS 定位符.
代码如下:
public class GoogleSearch {
public static void main(String[] args) {
WebDriver driver = new FirefoxDriver();
driver.get("https://www.gmail.com");
WebElement aboutGoogle = driver.findElement(By.cssSelector("a:contains('About Google')"));
driver.close();
driver.quit();
}
}
我得到下面提到的异常:
Exception in thread "main" org.openqa.selenium.InvalidSelectorException: The given selector a:contains('About Google') is either invalid or does not result in a WebElement. The following error occurred:
InvalidSelectorError: An invalid or illegal selector was specified
Command duration or timeout: 356 milliseconds
For documentation on this error, please visit: http://seleniumhq.org/exceptions/invalid_selector_exception.html
Build info: version: '2.45.0', revision: '32a636c', time: '2015-03-05 22:01:35'
System info: host: 'XXXXX', ip: '127.0.1.1', os.name: 'Linux', os.arch: 'amd64', os.version: '3.13.0-49-generic', java.version: '1.7.0_79'
*** Element info: {Using=css selector, value=a:contains('Need')}
Session ID: 0f1869f8-c59a-4f61-b1c7-b34ada42573f
Driver info: org.openqa.selenium.firefox.FirefoxDriver
我已经检查并能够使用相同的定位器在 Selenium IDE 中找到该元素。
我在某处读到 findElement()
方法正在返回一个 DOM 节点 并且代码期待WebElement 对象。
如果是这样的话,有没有workaround/casting?
有什么建议吗?
因为异常清楚地说明这里的问题是您的 Css 选择器无效。 '您正在尝试获取 About Google
锚标记 基于它的文本,该文本不是有效的 css 选择器 '。它更像是一个 jQuery 选择器。
您可以使用基于 href 属性值的选择器,如下所示,它将正常工作。
#footer-list a[href*='about']
并像
一样使用它WebElement aboutGoogle = driver.findElement(By.cssSelector("#footer-list a[href*='about']"));
主要问题出在这一行:
driver.findElement(By.cssSelector("a:contains('About Google')"));
css
不为 Selenium WD 维护 contains()
- See here.
要使用 contains()
,您必须使用 Xpath。
使用 Xpath 您的定位器将是:
//a[contains(text(), 'About Google')]
对于驱动程序,它将是:
driver.findElement(By.xpath("//a[contains(text(), 'About Google')]"));
要查找 与 Selenium 的链接,您可以使用:
driver.findElement(By.linkText("your link name here"));
与Xpath[=相比,CSS选择器的限制59=]:
- 你不能用 CSS 选择器获取父元素(Xpath 有 XPath 轴)
- 您不能使用包含(这只是 XPath 权限)。
顺便说一句
要处理来自页面的 Xpath 定位器,您可以使用 Firefox 浏览器的扩展程序:
CssSelector
在脚本中不起作用,但在 selenium IDE.
在gmail这样的网站上工作也不好。