在为Web应用程序编写selenium测试用例时,我遇到了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的颜色框(我缩短了它,里面有大约30个类似div,类为“lesboek_popup”):
<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>
对于测试,我想打开'Biologie'链接。 Selenium IDE为我提供了以下硒代码
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,而当我自己检查时,此元素肯定存在于颜色框中(调用/ xpath甚至由Selenium IDE自动生成)。有没有人知道可能导致NoSuchElementException的原因?
答案 0 :(得分:5)
您的弹出窗口出现时可能应该等待。尝试使用Implicit waits
WebDriver driver = new FirefoxDriver();
driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(10));
如果它是页面上文本Biologie的唯一链接,您也可以使用driver.FindElement(By.LinkText("Biologie")).click()
代替xpath