2014-06-20 61 views
1

我目前正在努力自動化一個原型網站,並有一個時間的惡魔發現這個元素。不知道如何選擇這個元素

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

編輯:我還應該注意,這不是我遇到這個問題的唯一元素。我只是假設這個問題的答案也適用於其他兩個(因爲他們遵循相同的形式)。

回答

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

+0

不幸的是,這並沒有奏效。我確實給你一個嘗試,但嘗試! – Brandon

+0

謝謝@Brandon。你確定這個元素在你看到它的時候正在返回你的HTML嗎? – Crasher

+0

我編輯了我的答案=) – Crasher

0

我認爲問題是,我元素的寬度和高度= 0,因此它不可點擊。

爲WebElement#點擊的javadoc說:

有一些前提條件被點擊的元素。 元素必須是可見的,它必須有一個高度和寬度大於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> 

如果您現在可以單擊該元素,就是這樣。

順便說一句,你確定你需要點擊'我'元素?對我來說很奇怪。 你通常有一個「按鈕」,或「輸入」或「一個」元素;不是'我'。

您可能嘗試的另一件事是使用不同的瀏覽器。你到目前爲止使用了什麼?

相關問題