2013-06-05 34 views
1

嗨,我需要驗證,如果我要點擊的項目有一個美元符號,並沒有缺貨。所以我使用了這種方法。如果列表上的第一個項目滿足條件,但是如果第一個項目沒有美元符號,它不會轉到第二個項目並單擊它,它會失敗。由於我是編程新手,我不知道在代碼中是否犯了錯誤。 我該如何解決這個問題?謝謝。如何使用C#在Selenium WebDriver的列表中單擊一個項目?

代碼:

 ReadOnlyCollection<IWebElement> listOfItems = driver.FindElements(By.CssSelector("ul[class='shelf-list tap-list search']>li")); 
      foreach (IWebElement item in listOfItems) 
      { 
       //To check if item is not sold out get the class attribute of item and check if empty 
       string className = item.GetAttribute("class"); 
       Console.WriteLine("Classname:" + " " + className); 
       if (className.Equals("")) 
       { 
        //Item is available and now get text and check if it has $ sign 
        IWebElement itemWithDollarSign = driver.FindElement(By.CssSelector("div[class='item-preview-text']>div[class='price']")); 
        string ItemToChoose = itemWithDollarSign.Text; 
        Console.WriteLine("Text:" + " " + ItemToChoose); 
        if (ItemToChoose.Contains("$")) 
        { 
         //Choose the item that satifies both conditions 
         itemWithDollarSign.Click(); 
         break; 
        } 
       } 
      } 

案例1個輸出:如果項目滿足這兩個條件

Classname: 
text: $189 

//顯示類名是空的,它進入循環。

情況下,2個輸出:如果第一項亙古不變的有$

Classname: 
text: Prices varies 
Classname: 
text: Prices varies 
Classname: 
text: Prices varies... 

不斷重複的30個項目在同一頁上,而不是去第二個。

+0

我把一個破發點就行了「字符串的className = item.GetAttribute ...」,並確保它正在滿足以下if語句。 – jac

+0

是的,我試着在不同的地方使用console.writeline來檢查它是否得到類名爲空,如果它獲取文本並驗證$。我已經更新了我在哪裏使用了打印和文本輸出的代碼。 – jessica

+0

我可能沒有正確讀取你的代碼,但它看起來像這樣:'driver.FindElement(By.CssSelector(「div [class ='item-preview-text']> div [class ='price']」)) ;'永不改變,所以它總能找到滿足條件的第一個項目。 – jac

回答

2

內部FindElement似乎想要得到itemWithDollarSign與循環item相關,但它似乎實際上是靜態的。

這個庫是不是我的麪包,黃油,但會是這樣的:

IWebElement itemWithDollarSign = item.FindElement(By.CssSelector("div[class='item-preview-text']>div[class='price']")); 
+0

哇,太棒了。我的代碼現在可用。它選擇第二項。非常感謝你。我知道它與物品有關,但不知道這是如何做到的。再次感謝。 – jessica

+0

你很受歡迎。 – DonBoitnott

相關問題