我编写了一个Webdriver C#脚本,用于在页面上定位值并将这些值转换为双精度值。
我的验证测试涉及三个变量:totalPrice,tax和totalBilled。
我想验证totalPrice + tax将等于totalBilled amount。
以下是我目前的代码
// Total Price Variables
string totalPrice;
string totalPriceTrm;
double totalPriceDbl;
// Tax Variables
string tax;
string taxTrm;
double taxDbl;
// Total Billed Variables
string totalBilled;
string totalBilledTrm;
double totalBilledDbl;
double totalBilledAmountToVerify;
// Read in Total Price
ReadOnlyCollection<IWebElement> aa = driver.FindElements(By.Id("total_price"));
for (int k = 0; k < aa.Count; k++)
{
//Console.WriteLine("Order Number" + " " + ec[k].GetAttribute("value"));
totalPrice = aa[k].GetAttribute("value");
totalPriceTrm = totalPrice.Trim( new Char[] { ' ', 'A', 'U', 'D', '$'} );
totalPriceDbl = Convert.ToDouble(totalPriceTrm);
}
// Read in Tax
ReadOnlyCollection<IWebElement> bb = driver.FindElements(By.Id("gst"));
for (int k = 0; k < bb.Count; k++)
{
//Console.WriteLine("Order Number" + " " + ec[k].GetAttribute("value"));
tax = bb[k].GetAttribute("value");
taxTrm = tax.Trim(new Char[] { ' ', 'A', 'U', 'D', '$' });
taxDbl = Convert.ToDouble(taxTrm);
}
// Read in Total Billed
ReadOnlyCollection<IWebElement> cc = driver.FindElements(By.Id("final_price"));
for (int k = 0; k < cc.Count; k++)
{
//Console.WriteLine("Order Number" + " " + ec[k].GetAttribute("value"));
totalBilled = cc[k].GetAttribute("value");
totalBilledTrm = totalBilled.Trim(new Char[] { ' ', 'A', 'U', 'D', '$' });
totalBilledDbl = Convert.ToDouble(totalBilledTrm);
}
问题:我已声明了double totalBilledAmountToVerify,并希望它存储totalPriceDbl + taxDbl的结果。然后,我想将totalBilledDbl与totalBilledAmountToVerify进行比较(两者应该相等)。
但是,当我插入以下行时,我收到一条消息,告诉我totalPriceDbl和taxDbl未分配。我认为这些变量需要包含在范围内,但我不确定如何做到这一点。
totalBilledAmountToVerify = totalPriceDbl + taxDbl;
答案 0 :(得分:0)
您可以为for
循环内的变量赋值。循环中的代码可能永远不会执行(例如,如果for (int k = 0; k < aa.Count; k++)
为0,则aa.Count
内的代码将不会执行)。这就是为什么你得到的变量可能是未分配的错误。
要轻松修复它,请在声明变量时为变量指定一些值
double taxDbl = 0;
double totalBilledDbl = 0;
实际上你甚至不需要for
循环。 FindElements(By.Id)
应该只返回一个元素。如果没有,请尝试使用css选择器获得单个结果。