Selenium找不到元素

时间:2016-02-19 14:41:49

标签: java selenium testing webdriver

我正在用Java编写测试,但Selenium无法找到名称为0108的元素:

<div id="appmngTabs">
<ul id="menu">
<li name="0101">
<li name="0102">
<li name="0103">
<li name="0104">
<li name="0105">
<li name="0106" class="activ">
<li name="0107">
<li name="0108">
<a onfocus="disableFocus()" onclick="focusTab('0108')" target="content" href="applMenu?mode=cnt&menu=EOB2B&uni=0108" name="0108">Interfacing</a>
</li>
<li name="0109">
<li name="0199">

我在这段HTML代码中看不到任何特别之处,但Selenium无法点击它。我尝试过:

driver.findElement(By.name("0108")).click();
driver.findElement(By.cssSelector("[name=0108]")).click();
driver.findElement(By.cssSelector("li[name=0108]")).click();

我尝试过这样的组合:

driver.findElement(By.id("menu").name("0108")).click();

仍然没有。我做错了吗?

更新:框架:

<frame id="menu" noresize="" marginheight="0" marginwidth="0" scrolling="no" frameborder="0" name="menu" src="applMenu?menu=EOB2B">

更新2:框架/框架集

<frameset framespacing="0" frameborder="0" rows="144,*">
<frame id="menu" noresize="" marginheight="0" marginwidth="0" scrolling="no" frameborder="0" name="menu" src="applMenu?menu=EOB2B">
<frame id="content" noresize="" marginheight="0" marginwidth="0" scrolling="auto" frameborder="0" name="content" src="applMenu?mode=cnt&menu=EOB2B">
</frameset>

更新3:AJAX 我被告知问题可能是加载ajax,我添加了这个:

WebDriverWait wait = new WebDriverWait(driver, 35);
wait.until(ExpectedConditions.presenceOfElementLocated(By.name("0108")));

但它也没有帮助。

更新4:HtmlDriver与FireforDriver。 我在运行测试时使用了html驱动程序,但我尝试使用firefox驱动程序来查看实际发生的事情,打开页面后,错误文档无法打开出现,而使用selenium ide时,没有问题 - 测试很顺利。

我该怎么办?

2 个答案:

答案 0 :(得分:2)

由于该元素位于frame内,切换到,然后才发出findElement()

driver.switchTo().frame("menu");
driver.findElement(By.name("0108")).click();

当您需要返回主文档的上下文时:

driver.switchTo().defaultContent();

请注意,在单击子菜单之前,您可能还需要单击菜单将其打开。

答案 1 :(得分:-2)

尝试使用XPath

driver.findElement(By.xpath("//*[@name='108']"))

编辑:

如果你真的需要通过cssselector找到

driver.findElement(By.cssSelector("li[name=\"0108\"]")).click();

应该有用。