我正在使用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引用(x)与TD元素。但是我一直无法“看到”里面的第二个锚元素。我尝试了两种主要方法。
方法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);
}
}
有了这个代码,它永远不会看到第二锚(一个没有 '类= “名称”')。
第二种方法是:
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(“Name”)只会找到第一个锚点,这两个方法都可以看到(获取产品名称)。但我看不到价格元素。 – Moffat
你的第一个代码对我来说工作正常......那么'x.FindElements(By.TagName(“a”))'返回什么?里面有1个元素的集合?这是什么浏览器?在你的第二部分代码中,我假设你的意思是代替'price'变成'1,999.00',它只是'-1'? – Arran