動機
SeleniumのCSSセレクターメカニズムをCSS属性セレクターおよびHTML5data-
カスタム属性とともに利用して、要素の特定のフックに対処します。
問題
上記を使用してCSSクラス名とdata-
属性が割り当てられた要素を見つけると、次の例外がスローされます。
Caused by: org.openqa.selenium.remote.ErrorHandler$UnknownServerException: The given selector .gs-a-btn["data-value"] is either invalid or does not result in a WebElement. The following error occurred:
[Exception... "An invalid or illegal string was specified" code: "12" nsresult: "0x8053000c (NS_ERROR_DOM_SYNTAX_ERR)" location: "file:///C:/DOCUME~1/eliranm/LOCALS~1/Temp/anonymous6109849275533680625webdriver-profile/extensions/fxdriver@googlecode.com/components/driver_component.js Line: 5956"]
Build info: version: '2.23.1', revision: '17143', time: '2012-06-08 18:59:28'
System info: os.name: 'Windows XP', os.arch: 'x86', os.version: '5.1', java.version: '1.6.0_31'
Driver info: driver.version: unknown
at <anonymous class>.<anonymous method>(file:///C:/DOCUME~1/eliranm/LOCALS~1/Temp/anonymous6109849275533680625webdriver-profile/extensions/fxdriver@googlecode.com/components/driver_component.js:6537)
関連コード
public void previous(String type) {
By cssSelector = By.cssSelector(".gs-a-btn[data-value='" + type + "']");
driver.findElement(cssSelector).click();
}
私は何を試しましたか
- 属性セレクタークエリ内で一重引用符をエスケープされた二重引用符に置き換えます。
".gs-a-btn[\"data-value\"]"
属性値セレクターの代わりに属性セレクターを指定します。つまり、".gs-a-btn[data-value='" + type + "']"
。CSS属性セレクターの制限について、 SeleniumReferenceなどの参照で情報を検索します。この文書には、具体的に次のように記載されています。
現在、 cssセレクターロケーターは、 css3の名前空間
:nth-of-type
、 一部の疑似クラス(、、、、、、、、、、、):nth-last-of-type
、および疑似要素( 、、、、、)を除くすべてのcss1、css2、およびcss3セレクターをサポートし ています 。:first-of-type
:last-of-type
:only-of-type
:visited
:hover
:active
:focus
:indeterminate
::first-line
::first-letter
::selection
::before
::after