单元测试不执行循环应该如何

时间:2015-12-03 13:55:03

标签: c# unit-testing selenium

我希望代码执行的操作基本上很简单,我希望它转到所有文章并选择所有文章评分,然后将返回的评分解析为int ,然后检查(在每篇文章的复选框上)评级为5或更高的文章,我希望它最多检查10篇文章。 代码如下:

string notes =  driver.FindElement(By.XPath("//article[*]/div/div[1]/div/div/span"))
    .Text.Replace(" notes", "");//here I just had to remove the word notes from the rating in order to use this variable. 
int Notes = int.Parse(notes);
int article = 0;
if (Notes >= 5)
{
    do //>--the number of articles selected
    {
        driver.FindElement(By.XPath("//article[*]/div/div[2]/div[1]/div[2]")).Click();
        article = article + 1;
    } while (article < 10);
}

实际发生的事情是它检查了第一篇文章十次(或者更好地说它检查取消选中该复选框五次),然后继续进行剩下的测试,所以任何人都可以告诉我该如何解决它。

修改 我更改了代码(不起作用):

int post = 1;
int posted = 0;
var Xpath_post = string.Format("//article[{1}]/div/div[2]/div[1]/div[2]", post);
string notes = driver.FindElement(By.XPath(Xpath_post)).Text.Replace(" notes", "");
int Notes;
Notes = int.Parse(notes);
        do
        {
            if (Notes >= 5)
            {
                driver.FindElement(By.XPath(Xpath_post)).Click();
                posted = post;
                post = post + 1;
            }
            else
            {
                post = post + 1;
            }
        } while (posted < 10);

仍然需要帮助!

好的再次给我一个有用的提示来改进我的代码所以这是我的最新更新,我更换了(在第二个代码中)这一行:
var Xpath_post = string.Format("//article[{1}]/div/div[2]/div[1]/div[2]", post);
有以下两行:
string post1 = post.ToString(); string Xpath_post = string.Format("//article[{0}]/div/div[2]/div[1]/div[2]", post1);为什么我这样做,@ PHeiberg发表评论post变量的更改不会更改字符串Xpath_post,因为变量不是构建字符串的一部分。现在我想为什么我们不知道我是否能找到解决这个问题的方法并猜测我无法解决的问题,震惊吧?!
无论如何,如果有人能帮助你,那将会很棒。

2 个答案:

答案 0 :(得分:0)

该行

driver.FindElement(By.XPath("//article[*]/div/div[2]/div[1]/div[2]")).Click();

需要使用文章索引,以便在while循环中获取正确的文章。替换为:

var expression = string.Format("//article[{0}]/div/div[2]/div[1]/div[2]", article);
driver.FindElement(By.XPath(expression)).Click();

为每篇文章构建适当的xpath表达式。

您编辑的代码的问题在于您在开始时构建了Xpath_post一次。对post变量进行更改不会更改该字符串,因为该变量不是构建字符串的一部分。

答案 1 :(得分:0)

好的就是解决方案:

        int post = 1;
        int posted = 0;
        do
        {
            var post1 = post.ToString();
            string xpathnotes = $"//article[{post1}]/div/div[1]/div[1]/div[1]/span";
            string notes = _driver.FindElement(By.XPath(xpathnotes)).Text.Replace(" notes", "");
            if (int.Parse(notes) >= 5)
            {
                string xpathcheck = $"//article[{post1}]/div/div[2]/div/a";
                _driver.FindElement(By.Xpath("xpathcheck")).Click();

                posted = posted + 1;
                post = post + 1;
            }
            else
            {
                post = post + 1;
            }
        } while (posted < 10);