Я использую Selenium C#. Вот HTML, что я ищу (пожалуйста, простите за орфографию - это не ошибка транскрипции):FindElements не возвращает все согласованные элементы
<td class="Search3-product-cell" align="left">
<div class="SearchRersultsNameCell">
<a id="MainPlaceHolder_ContentPlaceHolder_SearchMatrix_SearchResultView_ProductNameLink_33" class="Name">Tango 6 Pc. Queen Bedroom Set</a>
<br/>
<a id="MainPlaceHolder_ContentPlaceHolder_SearchMatrix_SearchResultView_ProductPriceLink_33">$1,999.00</a>
</div>
</td>
У меня есть ссылка IWebElement (х) к элементу тд. Но я не смог «увидеть» второй элемент привязки внутри него. Я пробовал два основных способа.
Метод 1:
foreach (IWebElement we in x.FindElements(By.TagName("a"))) // for each anchor element
{
if (we.GetAttribute("class").Equals("Name"))
{
name = we.Text;
}
else
{
price = Util.ConvertCurrencyToDecimal(we.Text);
}
}
С помощью этого кода, он никогда не видит второй якорь (тот без 'класс = "Name"').
Второй метод:
IWebElement x = elem.FindElement(By.ClassName("SearchRersultsNameCell"));
myLocator = By.CssSelector("a[id^='MainPlaceHolder_ContentPlaceHolder_SearchMatrix_SearchResultView_ProductNameLink_']");
if (SeleniumHelpers.IsElementPresentNoWait(elem, myLocator))
{
name = x.FindElement(myLocator).Text;
}
else
{
name = "Name not found";
}
myLocator = By.CssSelector("a[id^='MainPlaceHolder_ContentPlaceHolder_SearchMatrix_SearchResultView_ProductPriceLink_']");
if (SeleniumHelpers.IsElementPresentNoWait(elem, myLocator))
{
price = x.FindElement(myLocator).Text;
}
else
{
price = -1;
}
Опять же, ни в одном случае не код увидеть второй якорь.
Что мне не хватает? Заранее спасибо.
Вы пытались вызвать второй элемент, используя 'By.className =" Name "'? – Brian
Второй элемент привязки не имеет атрибута класса, поэтому поиск By.ClassName («Имя») найдет только первый якорь, который видят оба моих метода (чтобы получить имя продукта). Но я не вижу элемент цены. – Moffat
Ваш первый код работает отлично для меня ... так что значит 'x.FindElements (By.TagName (" a "))' return? Коллекция из 1 элемента внутри? Что это за браузер? В вашей второй части кода я предполагаю, что вы имеете в виду, что вместо 'price' становится' 1,999,00', это просто '-1'? – Arran