В документе HTML найдите «текст», появляющийся после другого «текста», используя xpath в Java & Selenium - PullRequest
0 голосов
/ 16 октября 2019

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», используя тот факт, что он появляется после текста «Соответствующий требованиям ITC» ШАГ 3: Затем найдите первую «таблицу»сразу после текста "(A) ITC Available"

Чтобы найти 'таблицу', присутствующую внутри 'div id = "demo4b"', мое требование -


ШАГ 1:Сначала найдите текст «Соответствующий требованиям ITC» ШАГ 2: Затем найдите текст «(B) ITC Reverse», используя тот факт, что он появляется после текста «Соответствующий требованиям ITC», за которым следует текст «(A) ITC Available»ШАГ 3: Затем найдите первую «таблицу», следующую сразу за текстом «(B) ITC Reversed»

То, что я до сих пор пробовал, используя «следующие» оси xpath в Java & Selenium-



Чтобы найти «таблицу», присутствующую внутри «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 в Java & Selenium-



Чтобы найти 'таблицу', присутствующую внутри '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]")
    );

Моя проблема заключается в том, как найти текст (как в ШАГЕ 2), который появляется после другого текста (как в ШАГЕ1) использование «следующих» осей xpath (как в ШАГЕ 3)?

Любая помощь в этом отношении высоко ценится.

Ответы [ 4 ]

0 голосов
/ 16 октября 2019

Я думаю, что следующие выражения соответствуют вашим шаговым требованиям.

Чтобы получить вашу первую таблицу, попробуйте это выражение 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]
0 голосов
/ 16 октября 2019

Xpath для извлечения элемента "(A) ITC Available":

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

или

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

Получить элемент "table":

follow-sibling: выбирает всех братьев и сестер после текущего узла

//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
0 голосов
/ 16 октября 2019

Вы можете попробовать код ниже:

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]"));

Для таблиц a и b вы можете использовать id, и нет необходимости использовать относительный xpath:

WebElement tableA = gstr3bFullPageData.findElement(By.cssSelector("#demo4a table"))
WebElement tableB = gstr3bFullPageData.findElement(By.cssSelector("#demo4b table"))
0 голосов
/ 16 октября 2019

Вы можете попробовать использовать локаторы XPATH, такие как

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

Если вам нужно использовать текст для идентификации таблицы, попробуйте как

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...