C#Selenium XPath数据来自包含跨度的行
我试图从一个有两列的表中获取数据。这些行没有不同的标识符。但我可以在第一列中搜索细节,以确定是否应该获取第二列的数据。表中有多行,尽管下面的示例仅显示了一行C#Selenium XPath数据来自包含跨度的行,c#,selenium,xpath,getattribute,xpath-1.0,C#,Selenium,Xpath,Getattribute,Xpath 1.0,我试图从一个有两列的表中获取数据。这些行没有不同的标识符。但我可以在第一列中搜索细节,以确定是否应该获取第二列的数据。表中有多行,尽管下面的示例仅显示了一行 <table id="subtotals-marketplace-table" class="a-normal a-align-bottom a-spacing-none a-size-small"> <tbody><tr class="small-line-height"> <td>
<table id="subtotals-marketplace-table" class="a-normal a-align-bottom a-spacing-none a-size-small">
<tbody><tr class="small-line-height">
<td>
<span>
Total:
</span>
</td>
<td class="a-text-right aok-nowrap a-nowrap">
$12.80
</td>
</tr>
</tbody></table>
这里有不同的选择 备选案文1:
//table[@id='subtotals-marketplace-table']//tr[td[normalize-space(.)='Total:']]/td[2]
备选案文2:
//table[@id='subtotals-marketplace-table']//td[normalize-space(.)='Total:']/following-sibling::td
这里有不同的选择 备选案文1:
//table[@id='subtotals-marketplace-table']//tr[td[normalize-space(.)='Total:']]/td[2]
备选案文2:
//table[@id='subtotals-marketplace-table']//td[normalize-space(.)='Total:']/following-sibling::td
试试下面的Xpath
//table[@id='subtotals-marketplace-table']//tr//td[@class='a-text-right aok-nowrap a-nowrap']
或
试试下面的Xpath
//table[@id='subtotals-marketplace-table']//tr//td[@class='a-text-right aok-nowrap a-nowrap']
或
要定位文本总计,然后提取与$相关的金额,可以使用以下解决方案:
driver.FindElement(By.XPath("//table[@id='subtotals-marketplace-table']/tbody//td/span[contains(.,'Total:')]//following::td[1]")).GetAttribute("innerHTML");
new WebDriverWait(driver, TimeSpan.FromSeconds(20)).Until(ExpectedConditions.TextToBePresentInElementLocated(By.XPath("//table[@id='subtotals-marketplace-table']/tbody//td/span[contains(.,'Total:')]/following::td[1]"), "$")).GetAttribute("innerHTML");
更新 由于您将错误视为无法使用xpath表达式定位元素,因此可能必须诱导WebDriverWait使该元素可单击,并且可以使用以下解决方案:
driver.FindElement(By.XPath("//table[@id='subtotals-marketplace-table']/tbody//td/span[contains(.,'Total:')]//following::td[1]")).GetAttribute("innerHTML");
new WebDriverWait(driver, TimeSpan.FromSeconds(20)).Until(ExpectedConditions.TextToBePresentInElementLocated(By.XPath("//table[@id='subtotals-marketplace-table']/tbody//td/span[contains(.,'Total:')]/following::td[1]"), "$")).GetAttribute("innerHTML");
要定位文本总计,然后提取与$相关的金额,可以使用以下解决方案:
driver.FindElement(By.XPath("//table[@id='subtotals-marketplace-table']/tbody//td/span[contains(.,'Total:')]//following::td[1]")).GetAttribute("innerHTML");
new WebDriverWait(driver, TimeSpan.FromSeconds(20)).Until(ExpectedConditions.TextToBePresentInElementLocated(By.XPath("//table[@id='subtotals-marketplace-table']/tbody//td/span[contains(.,'Total:')]/following::td[1]"), "$")).GetAttribute("innerHTML");
更新 由于您将错误视为无法使用xpath表达式定位元素,因此可能必须诱导WebDriverWait使该元素可单击,并且可以使用以下解决方案:
driver.FindElement(By.XPath("//table[@id='subtotals-marketplace-table']/tbody//td/span[contains(.,'Total:')]//following::td[1]")).GetAttribute("innerHTML");
new WebDriverWait(driver, TimeSpan.FromSeconds(20)).Until(ExpectedConditions.TextToBePresentInElementLocated(By.XPath("//table[@id='subtotals-marketplace-table']/tbody//td/span[contains(.,'Total:')]/following::td[1]"), "$")).GetAttribute("innerHTML");
谢谢,但返回“无法使用xpath表达式驱动程序定位元素”。@Roro检查更新的答案并让我知道状态谢谢,但返回“无法使用xpath表达式驱动程序定位元素”@Roro签出更新的答案并让我知道状态第一个选项太通用了,因为多行具有相同的类,但是第二个选项非常有效!谢谢。第一个选项太通用了,因为多行具有相同的类,但是第二个选项非常有效!非常感谢。