单击通过jquery加载的菜单栏的动态div

时间:2014-12-04 18:44:31

标签: selenium webdriver

我使用Selenium 2.44库和IE 9浏览器

通过js.动态加载菜单栏。我试图通过findElement找到元素 - 使用Xpath。它最终会抛出nosuchElement异常。下面是Dom元素的片段

<html><body class="page">
    <div id="dynamicMenu" style="display: block;">
    <ul class="sf-menu  sf-js-enabled sf-shadow">

      <li sequence="7">
       <a class="sf-with-ul" href="UserContentStart.aspx?category=17">Type
       <span class="sf-sub-indicator"> »</span></a>

       <ul style="display: none; visibility: hidden;">
        <li sequence="0">
         <a href="UserContentStart.aspx?category=19">Brochure</a>
        </li>
        <li sequence="1">
         <a href="UserContentStart.aspx?category=22">Direct mail</a>
        </li>
        <li sequence="2">
         <a href="UserContentStart.aspx?category=21">E-mail</a>
        </li>
        <li sequence="3">
         <a href="UserContentStart.aspx?category=10019">Flyer</a>
        </li>
        <li sequence="4">
         <a href="UserContentStart.aspx?category=18">Poster</a>
        </li>
        <li sequence="5">
         <a href="UserContentStart.aspx?category=20">Presentation</a>
        </li>
        <li sequence="6">
         <a href="UserContentStart.aspx?category=10017">Letter</a>
        </li>
       </ul>
      </li>
     </ul>
    </div>

    </body></html>

我是否需要在找到元素之前执行javascript。 我没有访问源代码。我检查的是通过F12开发工具的DOM元素源。

谢谢!

2 个答案:

答案 0 :(得分:0)

//li[@sequence='5']/a应该适合你。并且,在此之前,您必须确保元素可见。

答案 1 :(得分:0)

代码下方将找到第5个元素并将等待,直到它可见20秒。 一旦可见,它将点击该元素。 在您的情况下,第5个元素是指向&#39; 演示文稿&#39;的链接。这是在&#39; a &#39;标签

WebDriverWait  Test = new WebDriverWait(driver, 10);
WebElement Fifth_Link = Test.until(ExpectedConditions.elementToBeClickable(By.xpath("//a[contains(text(),'Presentation')]")));
Fifth_Link.click();

如果它不起作用,请告诉我。