0

展開または折りたたむことができる要素を持つ HTML コードがあります (現在の要素によって異なります)。展開できるのは 1 レベルのみです。なんかこんな感じ

<a href = "#" title = "Expand" id = ...>Row 1 </a>
<a href = "#" title = "Expand" id = ...>Row 2 </a>
<a href = "#" title = "Collapse" id = ...>Row 3 </a>
<a href = "#" id = ...>Subrow 3.1 </a>
<a href = "#" id = ...>Subrow 3.2 </a>
<a href = "#" title = "Expand" id = ...>Row 4 </a>
<a href = "#" title = "Collaps" id = ...>Row 5 </a>
<a href = "#" id = ...>Subrow 5.1 </a>
<a href = "#" id = ...>Subrow 5.2 </a>

他にもたくさんあり、これよりも少し複雑ですが、全体像がわかります。ページオブジェクトを使ってリストを作りました

@FindBy(xpath = "//a[contains(@title, 'Expand') or contains(@title, 'Collapse')]")
private List<WebElement> expandCollapseElements

そして、たとえばそれらを展開する方法:

public void expand() {
   for (WebElement ele : expndCollapseElements) {
       if (ele.getAttribute("title").equals("Expand")) {
            ele.click();
       }
   }
}

実際のコードでは、タイトルが変更されるまで待ってみたので、うまくいったことがわかりました。とにかく、問題は、要素を展開すると、その下にあるすべての要素が明らかに古くなることです。@FindBy を使用すると、毎回要素が再検索されることを知っています。しかし、要素がいつ更新されるのか疑問に思っています。ループの最初に一度だけ行われるようです。本当?要素リストはいつ更新されますか? そして、これを行うためのより良い方法はありますか? リストを含む新しいリストを作成し、それを逆にしてみましたが、実際には機能しませんでした。これらの行は独自のスクロール可能な div に表示され、要素の一部を表示するにはスクロールする必要があるため、問題はさらに複雑になります。それで、何か考えはありますか?

4

1 に答える 1

0

提案: それが foreach と for の違いです。「For ループ」のみを使用してみてください。

于 2016-10-28T14:18:41.713 に答える