2

Web アプリケーションのセレン テストケースを作成しているときに、xpath セレクターに問題があります。Selenium でクリックする必要がある HTML コードの要素は次のとおりです。

<a title="Voeg een vak toe" href="#" onclick="javascript:$.colorbox({width:818,href:'/olo-cleanjump/profiel/addVakForm'}); return false;">
  <p class="add">
    <img class="add-icon" src="/olo-cleanjump/static/images/icon_add.png"/>
    Voeg vak toe
  </p>
</a>

Firefox 用の Selenium IDE プラグインは、このための次の Selenium コードを提供します。

driver.findElement(By.cssSelector("p.add")).click();

このリンクによって呼び出される addVakForm JavaScript 関数は、次の HTML を含むカラーボックスを開きます (私はそれを短縮しました。クラス「lesboek_popup」を持つ約 30 の同様の div があります)。

<div id="cboxLoadedContent" style="display: block; width: 776px; overflow: auto; height: 653px;">
  <div id="profielpagina_add">
    <h2>Voeg een vak toe aan je profiel</h2>
    <div class="lesboek_popup">
      <a class="content" href="/olo-cleanjump/profiel/addvak/120776">
        <img src="" alt="">
      </a>
      <p class="caption">
        <a href="/olo-cleanjump/profiel/addvak/120776">Engels</a>
      </p>
    </div>
    <div class="lesboek_popup">
      <a class="content" href="/olo-cleanjump/profiel/addvak/120786">
        <img src="" alt="">
      </a>
      <p class="caption">
        <a href="/olo-cleanjump/profiel/addvak/120786">Biologie</a>
      </p>
    </div>
  </div>

テストのために、「Biology」リンクを開きたいと思います。Selenium IDE は、これを行うために次の Selenium コードを取得しました

driver.findElement(By.xpath("//div[@id='profielpagina_add']/div[20]/a")).click();

この生物学リンク要素を選択します。これに基づいて、次のテストケースを作成しました。

 Test
public void testAddRemoveVak() throws Exception {
    this.get("");

    // vak 1 toevoegen
    driver.findElement(By.cssSelector("p.add")).click();
    driver.findElement(By.xpath("//div[@id='profielpagina_add']/div[20]/a")).click();

    // vak 2 toevoegen
    driver.findElement(By.cssSelector("p.add")).click();
    driver.findElement(By.xpath("//div[@id='profielpagina_add']/div[20]/a")).click();

    assertEquals(driver.findElements(By.xpath("//li[@class='vak']")).size(), 2);

    // vak 2 verwijderen
    this.get("profiel/removevak/120791");

    assertEquals(driver.findElements(By.xpath("//li[@class='vak']")).size(), 1);
}

一部

driver.findElement(By.cssSelector("p.add")).click(); 

実際に成功したので、この呼び出しの後にカラーボックスをロードする必要があります。しかし

driver.findElement(By.xpath("//div[@id='profielpagina_add']/div[20]/a")).click();

NoSuchElementException が発生しますが、自分でチェックすると、この要素はカラーボックスに確実に存在します (call/xpath は Selenium IDE によって自動生成されました)。NoSuchElementException の原因を知っている人はいますか?

4

1 に答える 1

5

おそらく、ポップアップが表示されるまで待つ必要があります。暗黙の待機を使用してみてください

WebDriver driver = new FirefoxDriver();
driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(10));

また、xpath の代わりにdriver.FindElement(By.LinkText("Biologie")).click()、ページ上のテキスト Biologie を含む唯一のリンクである場合に使用できます

于 2012-04-05T16:03:57.870 に答える