我目前正致力于自动化原型网站,并且正在寻找找到这个元素的时间。
<div id="cart-number">
<span>3</span>
</div>
<i class="step fi-shopping-cart size-30"></i>
当我检查它时,我显然可以在标记中看到它。但是,当我尝试在我的编码测试中与它进行交互时,它无法找到它。
[Test]
public void ClickOnShoppingCart()
{
try
{
driver.Navigate().GoToUrl(@"http://m.vdevint4.costco.com/");
IWebElement shoppingCart = driver.FindElement(By.CssSelector(@"i.step.fi-shopping-cart.size-30"));
shoppingCart.Click();
driver.Close();
}
catch (Exception exc)
{
Console.SetWindowSize(200, 88);
Console.WriteLine(exc.Message);
Console.ReadKey();
}
}
此时,我尝试了By.CssSelector()
,By.Id()
和By.XPath()
。所以,我的问题是,我错过了什么?有没有更好的方法来解决这个问题?我在尝试之前尝试过在线研究,但是我的GoogleFu
今天很弱。
编辑:我还应该注意,这不是我遇到此问题的唯一因素。我只是假设这个问题的答案对其他两个问题也有效(因为它们遵循相同的形式)。
答案 0 :(得分:1)
你可以等一下元素:
new WebDriverWait(driver, TimeSpan.FromMinutes(1)).Until(d => d.FindElements(By.XPath("//i[contains(@class, 'fi-shopping-cart')]")).Any());
然后,搜索它:
var btn = driver.FindElement(By.XPath("//i[contains(@class, 'fi-shopping-cart')]"));
if (btn != null)
{
btn.Click();
}
答案 1 :(得分:0)
我认为问题是i元素的宽度和高度= 0,因此无法点击。
WebElement的javadoc#click点击:
点击元素有一些先决条件。 元素必须是可见的,其高度和宽度必须大于0。
http://selenium.googlecode.com/git/docs/api/java/org/openqa/selenium/WebElement.html#click()
我猜C#文档也没有这么说,但我不确定。如果你发现这就是你无法点击元素的原因,那么它一定是个错误。
为了验证是否是这种情况,您可以尝试在'i'元素中写一些内容,例如
<i class="step fi-shopping-cart size-30">asd</i>
如果您现在可以单击该元素,那就是它。
是的,你确定你需要点击'i'元素吗?这对我来说很奇怪。 您通常有一个“按钮”,或“输入”或“一个”元素;不是空'我'。您可以尝试的另一件事是使用不同的浏览器。你到目前为止使用了什么?