嗨,我需要驗證,如果我要點擊的項目有一個美元符號,並沒有缺貨。所以我使用了這種方法。如果列表上的第一個項目滿足條件,但是如果第一個項目沒有美元符號,它不會轉到第二個項目並單擊它,它會失敗。由於我是編程新手,我不知道在代碼中是否犯了錯誤。 我該如何解決這個問題?謝謝。如何使用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個項目在同一頁上,而不是去第二個。
我把一個破發點就行了「字符串的className = item.GetAttribute ...」,並確保它正在滿足以下if語句。 – jac
是的,我試着在不同的地方使用console.writeline來檢查它是否得到類名爲空,如果它獲取文本並驗證$。我已經更新了我在哪裏使用了打印和文本輸出的代碼。 – jessica
我可能沒有正確讀取你的代碼,但它看起來像這樣:'driver.FindElement(By.CssSelector(「div [class ='item-preview-text']> div [class ='price']」)) ;'永不改變,所以它總能找到滿足條件的第一個項目。 – jac