2

我不能讓上鍊接文本的驅動程序中點擊名爲「賣」 我已經嘗試了很多的可能性,包括在此:如何在一個鏈接點擊列表內內的另一個列表

List <WebElement> eventLogList = driver.findElements(By.className("nav navbar-nav")); 

這裏的HTML代碼:

<ul class="nav navbar-nav"> 
      <li class="dropdown open"> 
       <a class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">event log<span class="caret"></span></a> 
       <ul class="dropdown-menu" role="menu"> 
        <li><a href="/scan/receive"><span class="text">income</span></a></li> 
        <li><a href="/scan/delivery"><span class="text">outcome</span></a></li> 
       </ul> 
      </li> 

      <li class="dropdown"> 
       <a class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Consult<span class="caret"></span></a> 
       <ul class="dropdown-menu" role="menu"> 
        <li><a href="/report/trackable"><span class="text" id="trackable_report">buy</span></a></li> 
        <li><a href="/report/event"><span class="text" id="event">details</span></a></li> 
       </ul> 
      </li> 

      <li class="dropdown"> 
       <a class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">serie number<span class="caret"></span></a> 
       <ul class="dropdown-menu" role="menu"> 
        <li><a href="/generate-ium"><span class="text" id="generate-ium">sell</span></a></li> 
        <li><a href="/generate-ium"><span class="text" id="generate-ium">resell</span></a></li> 
       </ul> 
      </li> 

     </ul> 
+0

嘗試與XPath找到它:'「// // UL A /跨度[@文=‘賣出’]」'和你的描述你可能會指出確切的元素,花了我一段時間,直到我找到它。 PS:有兩個同名的ID是錯誤的! – Edwin

回答

1

By.className不允許使用多個類,只有一個作爲名稱。

你想要的是By.cssSelector

List <WebElement> eventLogList = driver.findElements(By.cssSelector(".nav .navbar-nav")); 
1

你可以直接嘗試點擊使用

driver.findElement(By.linkText("sell").click(); 
+0

這不起作用,謝謝 – Mateus

2

的鏈接,你可以嘗試使用cssselector如下:

List <WebElement> eventLogList = driver.findElements(By.cssSelctor(".nav.navbar-nav")); 

和然後點擊銷售用途:

eventLogList.get(0).findElement(By.cssSelector("li:nth-child(3) ul>li>a")).click(); 
1

我遇到過類似的問題。這是懸停/點擊下拉菜單打開一個菜單。在點擊菜單項之前,您需要確保展開下拉菜單並且菜單項在點擊之前可見。當下拉菜單可見時,aria-expanded將被設置爲true

這是我如何處理它:

public boolean selectFromDropdown(String parentMenuText, String childMenuText) { 
    boolean flag = false; 
    // Get the nav bar 
    WebElement navBar = driver.findElement(By.cssSelector(".nav.navbar-nav")); 

    // Get all parent menu items 
    List<WebElement> allNavItems = navBar.findElements(By.xpath(".//li[contains(@class,'dropdown')]")); 

    // Loop through allNavItems to find the parentMenuText 
    for(WebElement parentMenuItem : allNavItems) { 
     WebElement parentMenuLink = parentMenuItem.findElement(By.xpath(".//a[contains(text(),'" + parentMenuItem + "')]")); 
     String actualText = parentMenuLink.getText(); 
     if(actualText.equalsIgnoreCase(parentMenuText) { 
      // if true, found parent menu item 
      parentMenuLink.click(); 
      // When parentMenuLink is clicked, it will trigger a DOM update in the aria-expanded attributes and therefore we need to re-initialize the element to avoid StaleElementException 
      parentMenuLink = parentMenuItem.findElement(By.xpath(".//a[contains(text(),'" + parentMenuItem + "')]")); 
      if(parentMenuLink.getAttribute("aria-expanded").equals("true")) { 
       //Get the child UL 
       WebElement childMenuContainer = parentMenuItem.findElement(By.xpath(".//ul[@role='menu']")); 

       // Get the child menu link 
       WebElement childMenuLink = childMenuContainer.findElements(By.xpath(".//li/a/span[@class='text' and contains(text(),'" + childMenuText + "')]/..")); 
       // Click on the child menu link 
       childMenuLink.click(); 
       flag = true; 
      } 
     } 
     if(flag) { 
      break; // Break out of the loop if child menu link has been clicked 
     } 
    } 
} 
0

問題解決了! 我已經嘗試過這個解決方案,因爲某些原因,它不能正常工作。 一些嘗試後,下面的解決方案解決我的問題 代碼如下:

 WebElement btnConsult= driver.findElement(By.xpath("//*[@id='bs-example-navbar-collapse-1']/ul[1]/li[2]/a")); 
    btnConsult.click(); 

    WebElement btnDetails = driver.findElement(By.linkText("Details")); 
    btnDetails.click(); 
相關問題