Selenium webdriver Xpath,带有属性名称中的点(。)

时间:2016-02-24 10:44:57

标签: 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</td>
    </tr>
</tbody>

我想找到mote.id行并点击第一个td - 标记

WebElement element = getDriver().findElement(By.xpath("//tr[@mote.id='12345']/td[1]"));

但是我得到以下错误:

Bad token, expected: ] got: .

4 个答案:

答案 0 :(得分:0)

使用此:

findElements(By.tagName("td")).get(0);

不需要mote.id。

使用

还有其他apporaches
{{1}}

答案 1 :(得分:0)

要找到<td>元素,请使用:

WebElement element = getDriver().findElement(By.xpath("//td[contains(text(),'Status')]"));

答案 2 :(得分:0)

在点之前需要两个<string name="app_link"><a href="My website link">Click me!</a></string> Intent intent = new Intent(Intent.ACTION_SEND); intent.setType("text/plain"); intent.putExtra("PostID", postID); intent.putExtra("UserID", userID); intent.putExtra(android.content.Intent.EXTRA_TEXT,activity.getString(R.string.app_link); activity.startActivity(Intent.createChooser(intent, "Share")); ,第一个\\以便第二个通过,第二个逃脱点,因此它变为文字。试试\

答案 3 :(得分:0)

你在哪个版本的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_idmoteid代替mote.id?这符合HTML和XML中的属性名称。