0

编辑:我已经更新了我的问题,我知道我可以将循环而不是 4 增加到 12,但我有单独的三个 for 循环的原因是因为这个;迭代第一个循环后,我必须单击轮播才能进入下一个迭代,因为您可以看到我更新的代码。- 抱歉,我在复制/粘贴时错过了代码。

我想遍历行,我的总行数是 3,每行有 4 列,例如:

row 1 has 4 columns
row 2 has 4 columns
row 3 has 4 columns

我创建了 3 个单独的 for 循环并且我的代码可以工作,但我相信我的代码还有改进的空间,它可以在一个循环中而不是三个循环中吗?

这是代码:

//first row

for (int j = 0; j < 4; j++) 
{  
   string _image = String.Format("id('gen{0}')/a[{1}]/img", j, "1");                 
   string _text = String.Format("id('gen{0}')/a[{1}]", j, "2");
   ...........
   WaitForElement(By.XPath(_text)).Click();
}

_carouselDot = String.Format("id('HomePage1_Carousel1')/div/ul/li[{0}]/a", 2);
WaitForElement(By.XPath(_carouselDot)).Click();

//second row
for (int j = 4; j < 8; j++) 
{  
   string _image = String.Format("id('gen{0}')/a[{1}]/img", j, "1");                 
   string _text = String.Format("id('gen{0}')/a[{1}]", j, "2");
   ...........
   WaitForElement(By.XPath(_text)).Click();
}

_carouselDot = String.Format("id('HomePage1_Carousel1')/div/ul/li[{0}]/a", 3);
WaitForElement(By.XPath(_carouselDot)).Click();

//third row
for (int j = 8; j < 12; j++) 
{  
   string _image = String.Format("id('gen{0}')/a[{1}]/img", j, "1");                 
   string _text = String.Format("id('gen{0}')/a[{1}]", j, "2");
   ...........
   WaitForElement(By.XPath(_text)).Click();
}
4

5 回答 5

5

是的,你可以有一个从 0 到 12 的循环......

for (int j = 0; j < 12; j++) 
{  
   string _image = String.Format("id('gen{0}')/a[{1}]/img", j, "1");                 
   string _text = String.Format("id('gen{0}')/a[{1}]", j, "2");
   ...........
   WaitForElement(By.XPath(_text)).Click();
}
于 2012-11-15T15:16:46.733 回答
5

像这样?

for (int i = 0; i < 3; i++) 
{  
   for (int j = 0; j < 4; j++)
   { 
        code here
   }
}

编辑:

因为您编辑了您的问题,所以现在看起来更好:

for (int i = 0; i < 12; i++)
       { 
            string _image = String.Format("id('gen{0}')/a[{1}]/img", j, "1");                 
            string _text = String.Format("id('gen{0}')/a[{1}]", j, "2");
            ...........
            WaitForElement(By.XPath(_text)).Click();

            if (i % 4 == 0)
            {
                _carouselDot = String.Format("id('HomePage1_Carousel1')/div/ul/li[{0}]/a", 2);
                WaitForElement(By.XPath(_carouselDot)).Click();
            }
       }
于 2012-11-15T15:17:27.310 回答
4

除了 j 的边界之外,我认为这三个块之间没有区别;那么为什么你不能只做一个循环呢?

for (int j = 0; j < 12; j++) 
...
于 2012-11-15T15:17:08.307 回答
3

这有什么问题——

for (int j = 0; j < 12; j++) 
{  
   string _image = String.Format("id('gen{0}')/a[{1}]/img", j, "1");                 
   string _text = String.Format("id('gen{0}')/a[{1}]", j, "2");
   ...........
   WaitForElement(By.XPath(_text)).Click();

   if(i % 4 == 3 && i != 11)
   {
      _carouselDot = String.Format("id('HomePage1_Carousel1')/div/ul/li[{0}]/a",
                                                                 (i/4 + 2));
       WaitForElement(By.XPath(_carouselDot)).Click();
   }
}
于 2012-11-15T15:16:51.560 回答
1

您可以使用两个嵌套for块巧妙而有效地做到这一点:

int rows = 3;
int cols = 4;
for (int i = 0; i < rows; i++) 
{  
    for (int j = 0; j < cols; j++)
    { 
        int n = (cols * i) + j;
        string _image = String.Format("id('gen{0}')/a[{1}]/img", n, "1");                
        string _text = String.Format("id('gen{0}')/a[{1}]", n, "2");
        ...........
        WaitForElement(By.XPath(_text)).Click();
    }
    if (i < rows - 1) 
    {
        _carouselDot = String.Format("id('HomePage1_Carousel1')/div/ul/li[{0}]/a", 2);
        WaitForElement(By.XPath(_carouselDot)).Click();
    }
}

这样很明显,您正在处理三个单独的行,并且您可以根据需要使用更简单的if子句在每行的末尾或开头进行特殊处理。

针对新问题进行了编辑,表明您可以if()在内部for块之后执行。

此外,避免代码中出现幻数是一种很好的做法。这样可以避免错误,例如,如果您需要更改行数或列数,您只需更改一个变量。

于 2012-11-15T15:20:20.627 回答