Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#Selenium XPath数据来自包含跨度的行_C#_Selenium_Xpath_Getattribute_Xpath 1.0 - Fatal编程技术网

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签出更新的答案并让我知道状态第一个选项太通用了,因为多行具有相同的类,但是第二个选项非常有效!谢谢。第一个选项太通用了,因为多行具有相同的类,但是第二个选项非常有效!非常感谢。