不确定如何选择此元素

时间:2014-06-20 19:20:14

标签: c# selenium-webdriver

我目前正致力于自动化原型网站,并且正在寻找找到这个元素的时间。

<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今天很弱。

编辑:我还应该注意,这不是我遇到此问题的唯一因素。我只是假设这个问题的答案对其他两个问题也有效(因为它们遵循相同的形式)。

2 个答案:

答案 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();
}

XPath说明:http://www.w3schools.com/XPath/xpath_syntax.asp

答案 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'元素吗?这对我来说很奇怪。 您通常有一个“按钮”,或“输入”或“一个”元素;不是'我'。

您可以尝试的另一件事是使用不同的浏览器。你到目前为止使用了什么?