提问者:小点点

Selenium无法单击引导下拉菜单中的菜单项


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;  
              } 
           }    
    }

嗨,我正在尝试自动启动下拉菜单。默认情况下,它的可见性是隐藏的。将鼠标悬停在它上面时,它的可见性属性显示为可见。我可以单击下拉菜单,但是在单击下拉菜单后,我的selenium脚本不能从下拉菜单中选择值。

错误:线程"main"org.openqa.selenium.ElementNotVisibleException异常:无法单击元素

HTML代码段

<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个答案

匿名用户

几件事

  • 您不需要遍历所有li元素来找到您想要的元素,您可以使用Xpath
  • 我不知道为什么您使用JavaScript单击first Element,但除非Selenium提供的单击方法不起作用,否则我建议不要使用JavaScript Click
  • 错误提示元素不可见,可能是由于多种原因。您可以使用显式等待,直到元素可见,如下所述。它可能会解决您的问题

密码

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();