0

編集:質問を更新しました。ループを 4 から 12 に増やすことができることはわかっていますが、for ループを 3 つに分けているのはそのためです。最初のループを繰り返した後、更新されたコードを見ることができるので、次の次の繰り返しに進むためにカルーセルをクリックする必要があります。- 申し訳ありませんが、コピー/貼り付け中にコードを見逃してしまいました。

行を繰り返し処理したいのですが、合計行数は 3 で、すべての行には 4 列あります。たとえば、次のようになります。

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

3 つの個別の for ループを作成しましたが、コードは機能しますが、コードを改善する余地があると思います。3 つではなく 1 つのループにすることはできますか?

コードは次のとおりです。

//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の境界以外の3つのブロックの間に違いは見られません。では、なぜ1つのループだけを実行できないのでしょうか。

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ネストされた 2 つのブロック を使用すると、これを適切かつ効率的に行うことができます。

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();
    }
}

そうすれば、3 つの別々の行を扱っていることが明確になり、必要に応じて各行の最後または最初に特別な処理を、より単純なif節で行うことができます。

if()新しい質問用に編集され、内側のforブロックの後に実行できることを示しています。

また、コード内でマジック ナンバーを避けることをお勧めします。これにより、バグを回避できます。たとえば、行数や列数を変更する必要がある場合は、1 つの変数を変更するだけで済みます。

于 2012-11-15T15:20:20.627 に答える