我正在尝试为下面的 HTML 编写 XPath。
<div class="oxd-table-card" data-v-f2168256="">
<div class="oxd-table-row oxd-table-row--with-border" role="row" data-v-0d5ef602="" data-v-f2168256="">
<div class="oxd-table-cell oxd-padding-cell" role="cell" style="flex: 1 1 40%;">
<div data-v-6c07a142="">aaaaa Collings</div>
</div>
<div class="oxd-table-cell oxd-padding-cell" role="cell" style="flex: 1 1 40%;">
<div data-v-6c07a142="">2023-10-02 - 2023-10-08</div>
</div>
<div class="oxd-table-cell oxd-padding-cell" role="cell" style="flex: 1 1 20%;">
<div class="oxd-table-cell-actions" data-v-c423d1fa="">
<button type="button" class="oxd-button oxd-button--medium oxd-button--text oxd-table-cell-action-space" data-v-10d463b7="" data-v-c423d1fa="">
<!----> View
<!---->
</button>
</div>
</div>
</div>
</div>
我想要实现的目标:
XPath 从获取文本开始
<div data-v-6c07a142>aaaaa Collings</div>
然后移至父标签
<div class="oxd-table-cell oxd-padding-cell" role="cell" style="flex: 1 1 40%;">
然后移动到下一个同级并从中获取文本值
<div data-v-6c07a142>2023-10-02 - 2023-10-08</div>
网站:https://opensource-demo.orangehrmlive.com/web/index.php/auth/login 登录后,这是左侧菜单中的“时间”部分。我正在尝试获取时间模块中表的 XPath。
到目前为止我已经能够使用 XPath 获取文本
(//div[text()='aaaaa Collings']/parent::div/following-sibling::div)[1]
我想知道是否可以在不使用 XPath 中的索引的情况下获取文本。
我认为你的 XPath 没问题。这可能已经是最好的了。在这种情况下不需要索引,因为它是返回的第一个元素。你可以直接使用,
//div[text()='aaaaa Collings']/parent::div/following-sibling::div
使用FindElement(单数),它将拉出第一个(所需的)元素。
我刚刚查看了您的网站。如果你想自动化测试,你可以获取表行中的所有数据,你可以使用Selenium方法FindElements
//Locate Table
IWebElement table = driver.FindElement(By.XPath("//div[@class='oxd-table']"));
//Locate Rows using *FindElements*
IList<IWebElement> rows = table.FindElements(By.XPath("//div[contains(@class, 'oxd-table-card')]"));
这样您将获得所有数据并使用 for 循环:
foreach (var row in rows)
{
// Find all cells in the row
IList<IWebElement> cells = row.FindElements(By.XPath(//div[contains(@class, 'oxd-table-row')]));
// Create a list ***rowData*** to store row's data in cells and process
// Extract text from each cell and add to rowData
foreach (var cell in cells)
{
rowData.Add(cell.Text;));
// process data in list according to your needs...
}
}