[英]Selenium WebDriver Xpath current element attribute reports invalid Xpath exception
[英]Selenium webdriver Xpath with dot (.) in attribute name
我有以下html:
<table id="oTable">
<tbody>
<tr mote.id="12345">
<td>Status</td>
<td>1</td>
</tr>
<tr mote.id="54321">
<td>Status</td>
<td>2</td>
</tr>
</tbody>
我想找到带有mote.id
的行,然后单击第一个td
-tag
WebElement element = getDriver().findElement(By.xpath("//tr[@mote.id='12345']/td[1]"));
但是我收到以下错误:
Bad token, expected: ] got: .
用这个:
findElement(By.xpath("//tbody/tr[1]/td[1]"))
不需要mote.id。
也可以使用替代方法
findElements(By.tagName("td")).get(0);
要找到<td>
元素,请使用:
WebElement element = getDriver().findElement(By.xpath("//td[contains(text(),'Status')]"));
在点之前需要两个\\\\
,第一个\\
才能使第二个通过,而第二个要使点转义以使其变为文字。 尝试\\\\.
。
您使用的是哪个版本的Selenium? 我使用的是2.52.0(目前最新版本)和Python。 您的xpath可以工作:
>>> print driver.find_element_by_xpath("//*[@mote.id='12345']").get_attribute('innerHTML')
<td>Status</td>
<td>1</td>
>>>
>>> print driver.find_element_by_xpath("//tr[@mote.id='12345']/td[1]").get_attribute('innerHTML')
Status
另外,您可以编写一个辅助函数来查找所有相关的tr
元素,然后检查每个人的mote.id
是否为您想要的。
>>> def get_mote_by_id(mote_id):
... elems = driver.find_elements_by_xpath("//*[@id='oTable']/tbody/tr")
... for elem in elems:
... if elem.get_attribute('mote.id') == mote_id:
... return elem
...
>>>
>>> print get_mote_by_id('12345').get_attribute('innerHTML')
<td>Status</td>
<td>1</td>
(这显然比直接匹配的xpath慢,但是如果是版本问题,则是一种解决方法。)是的,它在Python中而不是Java中,但应该清楚Java版本应该做什么。
PS:以任何方式使您的开发人员或产品供应商使用mote_id
或moteid
代替mote.id
? 这将符合HTML和XML中的属性名称。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.