属性名中带点(.)的Selenium webdriver Xpath
我有以下html:属性名中带点(.)的Selenium webdriver Xpath,selenium,xpath,selenium-webdriver,Selenium,Xpath,Selenium Webdriver,我有以下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
<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>
但我得到了以下错误:
Bad token, expected: ] got: .
使用以下命令:
findElement(By.xpath("//tbody/tr[1]/td[1]"))
不需要汽车身份证
通过使用,也有其他方法
findElements(By.tagName("td")).get(0);
要定位
元素,请使用:
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
(这显然比直接匹配的xpath要慢,但如果是版本问题,那么这是一个解决办法。)是的,它是用Python而不是Java编写的,但应该清楚Java版本应该做什么
PS:您有没有办法让您的开发者或产品供应商使用
mote\u id
或mote\u id
而不是mote.id
?这将符合HTML和XML中的属性名称。我认为Calle可能简化了他的示例。我怀疑他会问这样一个简单的XPath是否可行的问题。有很多行,已知的唯一属性是mote。我试着用\来摆脱你的点。你有没有试过在没有mote的情况下使用xpath
。,就像//tr[@id='12345']/td[1]
?@anderson问题是我也有一行与parentmote.id=“12345”@Calle,Jagdeep关于//tr的建议[@mote\.id='12345']/td[1]
也不起作用吗?@Calle是否可以尝试获取所有行,然后使用selenium的GetAttribute
方法从代码中筛选行?也可以使用Driver.FindElements(By.XPath(//table[@id='oTable']/tbody/tr')),然后使用Afor循环来遍历每一个,并删除那些没有属性“MoT.ID”或没有正确值的属性。
>>> 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
>>> 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>