Похоже, вы действительно пытаетесь получить десятичное значение.Давайте воспользуемся этим предположением и создадим метод, который возвращает decimal?
для обозначения успеха (то есть значения) или неудачи (то есть null
).
public static class Ex
{
public static decimal? FindDecimalMaybe(this IWebDriver driver, string path)
{
try
{
if (decimal.TryParse(driver.FindElement(By.XPath(path)).Text, out decimal result))
{
return result;
}
}
catch { } // I hate this, but there doesn't seem to be a choice
return null;
}
}
Цель этого метода - скрыть неприятноеДело в том, что библиотека Selenium, по-видимому, кодирует исключение.
Я также создал ее как метод расширения, так что вызов driver.FindElement
заменяется чем-то, что выглядит знакомым - driver.FindDecimalMaybe
.
Теперь я использую тот же подход, что и Оливер со словарем:
private static Dictionary<string, string[]> __pricePaths = new Dictionary<string, string[]>
{
{ item.SITE.AMAZON, new [] { "//*[@id=\"priceblock_ourprice\"]", "//*[@id=\"priceblock_dealprice\"]" } },
{ item.SITE.ALI, new [] { "//*[@id=\"j-sku-discount-price\"]", "//*[@id=\"j-sku-price\"]" } },
};
Теперь тривиально вывести значения:
decimal? price =
__pricePaths[now.site]
.Select(path => driver.FindDecimalMaybe(path))
.Where(x => x.HasValue)
.FirstOrDefault();
Если переменная price
имеетvalue затем success, но если это null
, то вызов не был успешным.