2

私はセレン フレームワークを使用しており、id が head1、head2、head3 の 3 つの見出しタグの読み込みの完了をチェックしています。3 つの見出しタグすべての読み込みを確実にするために待機する合計待機時間は 12 秒です。 .3 つの見出しタグの読み込みは、1、2、3、4 秒のいずれかで発生する可能性があります。

ここで、コードの他の部分にジャンプできるように、3 つの見出しタグがすべて読み込まれているかどうかを確認するために、2 秒ごとに 12 秒ごとに定期的なチェックを行いたいと考えています。私はいくつかのコードを試しましたが、私の要件を満たす正確なコードを理解することができません.

以下のコードには、12 秒まで 2 秒ごとに h1 タグをチェックする、見出しタグが読み込まれるまでの待機が含まれています。

セレンコード

WebDriver driver = new FirefoxDriver();
driver.get("http://URL.com/Sample.jsp");
driver.manage().window().maximize();

Wait<WebDriver> wait = new FluentWait<WebDriver>(driver)
                       .withTimeout(12, TimeUnit.SECONDS)
                       .pollingEvery(2, TimeUnit.SECONDS)
                       .ignoring(NoSuchElementException.class);

WebElement foo = wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("h1")));

if((driver.findElement(By.id("h1")).getText()).length() >0)
   System.out.println("Element Loaded");
else
   System.out.println("Element yet to be Loaded");

HTML コード

<script type="text/javascript">

myFunction();

function myFunction()
{
    setTimeout(function(){populateDiv1();},3000);
    setTimeout(function(){populateDiv2();},6000);
    setTimeout(function(){populateDiv3();},9000);
}

function populateDiv1()
{   
  document.getElementById('div1').innerHTML = "<h1 id='head1'>Div1 Loaded</h1>";        
}

function populateDiv2()
{
  document.getElementById('div2').innerHTML = "<h1 id='head2'>Div2 Loaded</h1>";        
}

function populateDiv3()
{
  document.getElementById('div3').innerHTML = "<h1 id='head3'>Div3 Loaded</h1>";        
}
</script>
</head>
<body>
    <div id="div1"> 
    </div>
    <div id="div2">
    </div>
    <div id="div3">
    </div>
</body>
4

1 に答える 1

3

わかりました、解決策を見つけるのに少し時間がかかりましたが、これはあなたのケースでうまくいくはずです

ExpectedCondition e = new ExpectedCondition<Boolean>() {
    public Boolean apply(WebDriver driver) {
        return driver.findElements(By.cssSelector("div[id*='div']")).size() >= 2;
    }
};

WebDriverWait wait = new FluentWait<WebDriver>(driver)
                   .withTimeout(12, TimeUnit.SECONDS)
                   .pollingEvery(2, TimeUnit.SECONDS)
                   .ignoring(NoSuchElementException.class);
wait.until(e);

もちろん、各要素を個別に検索するなど、条件を任意の条件に変更できますbooleanExpectedConditionsこれは、Selenium の動作をカスタマイズするために独自のものを作成する方法です。

于 2013-11-13T09:05:01.683 に答える