Java 驱动程序发现错误的元素
我的html:Java 驱动程序发现错误的元素,java,selenium,webdriver,Java,Selenium,Webdriver,我的html: <ul class="level1 MenuItemClass static" tabindex="0" style="position: relative; width: auto; float: left;" role="menubar"> <li class="has-popup static" aria-haspopup="Menu1:submenu:17" role="menuitem" style="position: relative; float
<ul class="level1 MenuItemClass static" tabindex="0" style="position: relative; width: auto; float: left;" role="menubar">
<li class="has-popup static" aria-haspopup="Menu1:submenu:17" role="menuitem" style="position: relative; float: left;">
<a class="level1 MenuItemClass static" onclick="__doPostBack('mg200$Menu1','Menu1')" href="#" tabindex="-1">Menu1</a>
<ul id="Menu1:submenu:17" class="level2 MenuItemClass dynamic" style="display: none; position: absolute; top: 100%; left: 0px;">
<li class="dynamic" role="menuitem" style="position: relative;">
<a class="level2 MenuItemClass selected dynamic" href="/page1.aspx" tabindex="-1">Submenu1</a>
</li>
</ul>
</li>
<li class="has-popup static" aria-haspopup="Menu1:submenu:22" role="menuitem" style="position: relative; float: left;">
<a class="level1 MenuItemClass static" onclick="__doPostBack('mg200$Menu1','Menu2')" href="#" tabindex="-1">menu2</a>
<ul id="Menu1:submenu:22" class="level2 MenuItemClass dynamic" style="display: none; position: absolute; top: 100%; left: 0px;">
<li class="dynamic" role="menuitem" style="position: relative;">
<a class="level2 MenuItemClass dynamic" href="/page2.aspx" tabindex="-1">Submenu2</a>
</li>
</ul>
</li>
</ul>
...
moveToElement(By.xpath("//a[contains(text(), 'Menu1')]"));
moveToElement(By.xpath("//a[contains(text(), 'Submenu1')]"));
clickWhenTheElementIsClickable(By.xpath("//a[contains(text(), 'Submenu1')]"), 10);
...
public void moveToElement(By locator) {
Actions actions = new Actions(driver);
actions.moveToElement(driver.findElement(locator)).perform();
}
protected void clickWhenTheElementIsClickable(By locator, long timeout) {
WebDriverWait wait = (WebDriverWait)new WebDriverWait(driver,timeout)
.ignoring(StaleElementReferenceException.class);
WebElement element = wait.until(
ExpectedConditions.elementToBeClickable(locator));
element.click();
}
...
moveToElement(By.xpath("//a[contains(text(), 'menu2')]"));
行:
moveToElement(By.xpath("//a[contains(text(), 'menu2')]"));
工作内容如下:
moveToElement(By.xpath("//a[contains(text(), 'menu2')]"));
所以我期待着点击“子菜单1”。但光标移到了“Menu2”。
使用IEDriver 2.38.0
Firefox运行良好。
有什么想法吗?
试图清理项目。没有帮助。我找到了解决办法。
moveToElement(By.xpath("//a[contains(text(), 'menu2')]"));
“子菜单1”和“子菜单2”元素中存在奇怪的区域冲突。
因此,我编辑了moveToElement()方法:
moveToElement(By.xpath("//a[contains(text(), 'menu2')]"));
现在它在Firefox和IE中运行良好。
希望对中小企业有所帮助 当您进入测试时,是否所有菜单都打开(显示其子菜单)?是,在“moveToElement(By.xpath(//a[contains(text(),'Menu1')]”)之后;“子菜单1显示一段时间,然后光标转到“Menu2”
moveToElement(By.xpath("//a[contains(text(), 'menu2')]"));