逃脱美元符号Selenium xpath定位器

时间:2014-11-21 11:49:57

标签: java selenium xpath webdriver

我想找到一个属性为$ 9a的元素,但显然美元符号会导致问题。当我使用表达式时:

//td[@id='isc_6T']//span[@$9a='browse'] 

我收到以下异常

The given selector //td[@id='isc_6T']//span[@$9a='browse'] is either invalid or does not result in a WebElement. The following error occurred:
InvalidSelectorError: Unable to locate an element with the xpath expression //td[@id='isc_6T']//span[@$9a='browse'] because of the following error:
SyntaxError: The expression is not a legal expression.
Command duration or timeout: 9 milliseconds
For documentation on this error, please visit: http://seleniumhq.org/exceptions/invalid_selector_exception.html
Build info: version: '2.43.1', revision: '5163bceef1bc36d43f3dc0b83c88998168a363a0', time: '2014-09-10 09:43:55'
System info: host: 'daniel', ip: '127.0.1.1', os.name: 'Linux', os.arch: 'amd64', os.version: '3.13.0-39-generic', java.version: '1.7.0_65'
Session ID: 7fdd584b-10b8-4c5a-ab64-72fe7cff7e2a
Driver info: org.openqa.selenium.firefox.FirefoxDriver
Capabilities [{platform=LINUX, databaseEnabled=true, cssSelectorsEnabled=true, javascriptEnabled=true, acceptSslCerts=true, handlesAlerts=true, browserName=firefox, webStorageEnabled=true, nativeEvents=false, rotatable=false, locationContextEnabled=true, applicationCacheEnabled=true, takesScreenshot=true, version=33.0}]

编辑: 这是我想要找到的HTML部分。 (id是动态的,因此无法直接使用)

<span handlenativeevents="false" $9a="browse" id="isc_T9" role="button">
<img border="0" align="TEXTTOP" height="18" width="18" draggable="true" suppress="TRUE" style="vertical-align:middle;margin-top:0px;margin-bottom:0px;" id="isc_TA" src="some_image.png">
</span>

我已经创建了一个解决方法,使用Jsoup解析HTML以确定当前的动态ID,但我仍然想要一个更清洁的解决方案

3 个答案:

答案 0 :(得分:3)

&#39; $&#39; sign不能出现在XML属性名称中,而名称的XPath语法反映了XML语法。

根据这个答案:

What characters are allowed in an HTML attribute name?

HTML5属性名称允许使用美元符号和许多其他内容。但是,除非有人定义了从这些名称到有效XML名称的映射,否则它们不能从XPath引用;而且我不知道有任何这样的映射。

答案 1 :(得分:1)

如果您不必使用XPath并且想要使用css,那么相当容易。只需一个简单的\即可处理$

[\$9a='browse'] 

答案 2 :(得分:0)

以下可能有效:

//td[@id='isc_6T']//span[attribute::*[name() = '$9a' and . = 'browse']]

Michael Kay已经提到XML不允许这样做,因此这可能不适用于所有XPath引擎。但是,至少可以通过IntelliJ的“按xpath搜索”来实现。