【问题标题】:Selenium IEDriver finds wrong elementSelenium IEDriver 发现错误的元素
【发布时间】:2014-03-13 13:55:14
【问题描述】:

我的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: 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(), 'Submenu1')]"));

作为:

moveToElement(By.xpath("//a[contains(text(), 'menu2')]"));

所以我期待“Submenu1”被点击。但光标移动到“Menu2”。 使用 IEDriver 2.38.0 火狐工作正常。 有任何想法吗? 尝试清理项目。没有帮助。

【问题讨论】:

  • 当您在测试中到达那里时,您的所有菜单是否都打开(显示它们的子菜单)?
  • 是的,在 "moveToElement(By.xpath("//a[contains(text(), 'Menu1')]"));" 之后Submenu1 显示一会儿,然后光标转到“Menu2”

标签: java selenium webdriver


【解决方案1】:

我找到了解决方案。 'Submenu1' 和 'Submenu2' 元素中存在奇怪的区域冲突。 所以,我编辑了我的 moveToElement() 方法:

public void moveToElement(By locator) {
    Actions actions = new Actions(driver);
    actions.moveToElement(driver.findElement(locator), 1, 1).perform();         
}   

现在它在 Firefox 和 IE 中运行良好。 希望,这会有所帮助。

【讨论】:

    猜你喜欢
    • 2016-02-27
    • 2015-08-16
    • 2012-07-26
    • 2022-01-23
    • 1970-01-01
    • 1970-01-01
    • 2019-04-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多