C # Selenium XPath данные из строки, которая содержит диапазон - PullRequest
0 голосов
/ 29 мая 2019

Я пытаюсь получить данные из таблицы, которая имеет два столбца.Строки не имеют четкого идентификатора.Но я могу найти в первом столбце подробности, чтобы выяснить, стоит ли мне брать данные второго столбца.В таблице несколько строк, хотя в приведенном ниже примере я показываю только одну строку.

<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>

Мне нужно найти Total: и затем взять сумму в долларах в следующем столбце.Я пробовал несколько итераций чего-то в этом направлении, но не могу найти правильный синтаксис:

driver.FindElement(
                    By.XPath(
                        "//*[@id='subtotals-marketplace-table']//td[contains(text(),'Total:')]/following-sibling::td[1]"))
                    .Text;

driver.FindElement(
                    By.XPath(
                        "//table[@id='subtotals-marketplace-table']//td[contains(text(),'Total:')]/following-sibling::td[1]"))
                    .Text;

driver.FindElement(
                    By.XPath(
                        "//table[@id='subtotals-marketplace-table']/tbody//td[contains(text(),'Total:')]/following-sibling::td[1]"))
                    .Text;

Ответы [ 3 ]

2 голосов
/ 29 мая 2019

Попробуйте следовать Xpath.

//table[@id='subtotals-marketplace-table']//tr//td[@class='a-text-right aok-nowrap a-nowrap']

ИЛИ

//table[@id='subtotals-marketplace-table']//tr//span[contains(.,'Total:')]/parent::td/following-sibling::td[@class='a-text-right aok-nowrap a-nowrap']
0 голосов
/ 29 мая 2019

Чтобы найти текст Всего и затем извлечь сумму, связанную с $ , вы можете использовать следующее решение:

driver.FindElement(By.XPath("//table[@id='subtotals-marketplace-table']/tbody//td/span[contains(.,'Total:')]//following::td[1]")).GetAttribute("innerHTML");

Обновление

Поскольку вы видите ошибку как Невозможно найти элемент с выражением xpath , возможно, вам придется заставить WebDriverWait для элемента быть активируемым и вы можете использовать следующее решение:

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");
0 голосов
/ 29 мая 2019

Вот разные варианты.

Вариант 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
...