Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
属性名中带点(.)的Selenium webdriver Xpath_Selenium_Xpath_Selenium Webdriver - Fatal编程技术网

属性名中带点(.)的Selenium webdriver Xpath

属性名中带点(.)的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

我有以下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>
但我得到了以下错误:

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>