Selenium无法从bootstrap下拉列表中单击菜单项

时间:2017-06-27 11:14:04

标签: selenium selenium-webdriver webdriver

Actions action = new Actions(driver);
        WebElement we = driver.findElement(By.xpath("//*[@id='ctl00_Sitemap1_HyperLink1']"));
        action.moveToElement(we).build().perform();
        WebElement tmpElement= driver.findElement(By.xpath("//*[@id='ctl00_Sitemap1_HyperLink1']"));
        JavascriptExecutor js = (JavascriptExecutor) driver;
        js.executeScript("arguments[0].click();", tmpElement);
        List<WebElement> dd_list = driver.findElementsByXPath("//*[@id='masterNavigation']/ul/li[1]/ul/li"); 
           for (WebElement ele : dd_list) 
           {     
              System.out.println("Values " + ele.getAttribute("innerHTML"));     
              if (ele.getAttribute("innerHTML").contains("Event Dashboard")) {                   
                 ele.click();                                        
                 break;  
              } 
           }    
    }

您好我正在尝试Automate bootstrap下拉菜单。它的可见性默认是隐藏的。当你将鼠标悬停在它上面时,它的可见性属性显示为可见。我能够点击下拉列表,但是在点击下拉列表后,我的selenium脚本没有从下拉列表中选择值。

  

错误:线程“main”中的异常   org.openqa.selenium.ElementNotVisibleException:无法单击   元件

HTML Code Snippet

<a class="ui-button-text-icons" id="ctl00_Sitemap1_HyperLink1" href="javascript:void(void);">
    <span style="padding-right: 1.3em;">Dashboards</span>
    <span class="ui-button-icon-secondary ui-icon ui-icon-triangle-1-s"></span>
</a>
<ul style="visibility: hidden;">
    <li class="first featureGranted">
        <a href="ClassicDashboard.aspx">Classic Dashboard</a>
    </li>
</ul>

1 个答案:

答案 0 :(得分:0)

很少有事情

  • 您不需要遍历所有 li 元素来查找您希望使用Xpath执行此操作的元素
  • 我不知道您为什么使用JavaScript点击第一个元素,但除非Selenium提供的点击方法不起作用我建议不要使用JavaScript点击
  • 错误表明元素不可见,可能是由于多种原因造成的。您可以等待使用显式等待,直到元素可见,如下所述。它可能会解决您的问题

代码

Actions action = new Actions(driver);
WebElement we = driver.findElement(By.xpath("//*[@id='ctl00_Sitemap1_HyperLink1']"));
action.moveToElement(we).build().perform();
WebElement tmpElement= driver.findElement(By.xpath("//*[@id='ctl00_Sitemap1_HyperLink1']"));
JavascriptExecutor js = (JavascriptExecutor) driver;
// I have no idea why you are clicking using JavaScript
js.executeScript("arguments[0].click();", tmpElement);

WebDriverWait wait = new WebDriverWait(driver, 30);
WebElement eventDashboardMenu = wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//li[contains(text(),'Event Dashboard')]")));
eventDashboardMenu.click();