在HTML文档中,使用Java&Selenium中的xpath查找出现在另一个“文本”之后的“文本”

时间:2019-10-16 09:45:51

标签: java selenium xpath

HTML代码如下-


<div><a href=""><span>Eligible ITC</span></a></div>
    <div><a href=""><span>(A) ITC Available</span></a>
    <div id="demo4a">
        <table>
            <thead>
                <tr>
                    <th>Details</th>
                    <th>Integrated Tax</th>
                </tr>
            </thead>
            <tbody>
                <tr>
                    <td>(1) Import of goods</td>
                    <td>0.00</td>
                </tr>
            </tbody>
        </table>
    </div>
    </div>

    <div><a href=""><span>(B) ITC Reversed</span></a>
    <div id="demo4b">
        <table>
            <thead>
                <tr>
                    <th>Details</th>
                    <th>Integrated Tax</th>
                </tr>
            </thead>
            <tbody>
                <tr>
                    <td>(1) As per rules 42 & 43 of CGST/SGST Rules</td>
                    <td>5,32,467.00</td>
                </tr>                       
            </tbody>
        </table>
    </div>
    </div>

要找到“ div id =“ demo4a””中存在的“表”,我的要求是-


第1步:首先找到文本“符合条件的ITC” 步骤2:然后,找到文本“(A)ITC Available”,因为它出现在文本“ Eligible ITC”之后 步骤3:然后在文字“(A)ITC Available”之后立即找到第一个“表”

要找到“ div id =“ demo4b””中存在的“表”,我的要求是-


第1步:首先找到“符合条件的ITC”文本 步骤2:然后,找到文本“(B)ITC Reversed”,因为它出现在文本“ Eligible ITC”之后,其后是文本“(A)ITC Available” 步骤3:然后在文字“(B)ITC Reversed”之后紧接找到第一个“表格”

到目前为止,我在Java和Selenium中使用“以下” xpath轴进行了尝试-



要找到存在于'div =“ demo4a”中的'表'


对于步骤1:

           WebElement tableLocator = 
            gstr3bFullPageData.findElement(
                By.xpath("//*[normalize-space(text())='Eligible ITC']")
            );

对于步骤2:--------没办法做到!!! --------

对于步骤3:

       List<WebElement> table4_a_Data = 
           tableLocator.findElements(
               By.xpath("following::table[1]")
           );

到目前为止,我在Java和Selenium中使用“以下” xpath轴进行了尝试-



要找到存在于'div =“ demo4a”中的'表'


对于步骤1:

WebElement tableLocator = 
    gstr3bFullPageData.findElement(
        By.xpath("//*[normalize-space(text())='Eligible ITC']")
    );

对于步骤2:--------没办法做到!!! --------

对于步骤3:

List<WebElement> table4_a_Data = 
    tableLocator.findElements(
        By.xpath("following::table[1]")
    );

我的问题是如何使用“跟随” xpath轴(如STEP 3)来定位出现在另一个文本(如STEP 1)之后的文本(如STEP 2)?

在这方面的任何帮助都将受到高度赞赏。

4 个答案:

答案 0 :(得分:0)

您可以尝试使用类似的XPATH定位器

//*[@id='demo4a']/table

如果必须使用文本标识表格,请尝试

(//*[text() = 'Eligible ITC']//..//..//..//table)[1]

答案 1 :(得分:0)

用于获取“(A)ITC可用”元素的Xpath:

//div[.//span[text()="Eligible ITC"]]//span[1]

//div[.//span[text()="Eligible ITC"]]//span[contains(text(),"(A)")]

获取“表格”元素:

  

跟随兄弟姐妹:选择当前节点之后的所有兄弟姐妹

//div[.//span[text()="Eligible ITC"]]//div[.//span[contains(text(),"(A)")]]/following-sibling::div[1]/table

//div[.="Eligible ITC"]//div[contains(.,"(A)")]/following-sibling::div[1]/table

答案 2 :(得分:0)

您可以尝试以下代码:

WebElement tableLocator = gstr3bFullPageData.findElement(By.xpath("//*[normalize-space(text())='Eligible ITC']"));


WebElement table4_a = tableLocator.findElement(By.xpath("./a[.='(A) ITC Available']"));
WebElement table4_a_Data = table4_a.findElement(By.xpath("./following::table[1]"));


WebElement table4_b = tableLocator.findElement(By.xpath("./a[.='(B) ITC Reversed']"));
WebElement table4_b_Data = table4_b.findElement(By.xpath("./following::table[1]"));

对于ab表,您可以使用id,而无需使用相对xpath:

WebElement tableA = gstr3bFullPageData.findElement(By.cssSelector("#demo4a table"))
WebElement tableB = gstr3bFullPageData.findElement(By.cssSelector("#demo4b table"))

答案 3 :(得分:0)

我认为以下表达式符合您的步进要求。

要获取第一个表,请尝试使用此xpath表达式

//div/a/span[text()='Eligible ITC']//following::div/a/span[text()='(A) ITC Available']//following::div[1]/table[1]

要获取另一个,请尝试

//div/a/span[text()='Eligible ITC']//following::div/a/span[text()='(B) ITC Reversed']//following::div[1]/table[1]

而且,如果您希望两个表达式都相同,请尝试:

//div/a/span[text()='Eligible ITC']//following::div/a/span[text()= '(A) ITC Available' or text()= '(B) ITC Reversed']//following::div[1]/table[1]