java
  • selenium-webdriver
  • 2016-05-12 93 views 3 likes 
    3

    我有一個<li>標籤的列表,我需要點擊包含特定數字(比如說4)的標籤。如果語句(element.click或break)不起作用

    <li>1</li> 
    <li>2</li> 
    <li>3</li> 
    <li>4</li> 
    <li>5</li> 
    

    ,我的代碼是:

    int a = 4; 
    List<WebElement> allElements = driver.findElements(By.xpath("//div[@class='divClass']/ul[@class='ulClass']/li")); 
        for (WebElement element: allElements) { 
         String bText = element.getText(); 
         int b = Integer.parseInt(bText); 
         System.out.println(a + " ? " + b); 
         if (a == b){ 
          element.click(); 
          break; 
         } 
        } 
    

    Eclipse的結果是:

    1 ? 4 
    2 ? 4 
    3 ? 4 
    4 ? 4 
    5 ? 4 
    

    我不明白這有什麼錯的if聲明(爲element.click();break;不工作)...任何人都可以幫忙嗎?

    +0

    那是真的eclipse輸出還是你自己放在一起作爲你所看到的輸出的例子?我只問,因爲我看不到if狀態有什麼問題。你可以給每個項目和id,並使用一個id而不是xpath來使用getElement。 – Gavin

    +0

    這是Eclipse的輸出(和真實的代碼...我只修改類名,但只要Eclipse打印出正確的數字,這並不重要)。我無法修改網站,它在www上。 – Darkkrad

    回答

    1

    我想你可以通過

    "//div[@class='divClass']/ul[@class='ulClass']/li[text()='4']" 
    

    改變你的XPath表達式與價值得到LI標記你想

    +0

    @Shubham Jain 我修改瞭如下代碼: 'code'String xpathText =「\」// div [@ class ='divClass']/ul [@ class ='ulClass']/li [text()=' 「+ a +」'] \「」; System.out.println(xpathText); WebElement number1 = driver.findElement(By.xpath(xpathText)); number1.click();'code' 錯誤是(xpathText輸出正確): 線程「main」中的異常org.openqa.selenium.InvalidSelectorException:給定的選擇器「// div [@ class ='divClass ']/ul [@ class ='ulClass']/li [text()='4']「無效或不導致WebElement。 TypeError:表達式無法轉換爲返回指定的類型。 – Darkkrad

    1

    試試下面的代碼: -

    String value = driver.findElement(By.xpath("//div[@class='divClass']/ul[@class='ulClass']/li[4]")).getText(); 
    

    希望這將有助於你:)

    1
    Actually the control is not going inside if loop, 
    
        use below approch 
    
        String a = "4"; 
        List<WebElement> allElements = driver.findElements(By.xpath("//div[@class='divClass']/ul[@class='ulClass']/li")); 
         for (WebElement element: allElements) { 
          String bText = element.getText(); 
          System.out.println(a + " ? " + bText); 
          if (a.equals(bText)){ 
           element.click(); 
           break; 
          } 
         } 
    
    
    
    OR 
    
    Use javascript click instead of normal click....................... 
    
        String a = "4"; 
        List<WebElement> allElements = driver.findElements(By.xpath("//div[@class='divClass']/ul[@class='ulClass']/li"));`enter code here` 
    for(int i=0; i<allElements.size;i++) 
    { 
    if(a.equals(allElements.get(i).gettext(bText)) 
    { 
    javascriptExecutor jse = (JavascriptExecutor)driver; 
    jse.executeScript("arguments[0].click();", allElements.get(i)); 
    } 
    } 
    
    +0

    該代碼的工作原理是,我打印出內部值,如果循環和中斷完成他的工作,但我仍然有element.click()的問題,因爲沒有單擊正確的數字,但這不是這種情況。我會更深入地瞭解網站代碼,以瞭解爲什麼無法正常工作,因爲使用此代碼找到的元素應該是正確的。 非常感謝guyz的幫助,非常感謝! – Darkkrad

    +0

    使用javascript點擊代替正常點擊....................... for(int i = 0; i

    0

    @ Manjunatha.N 我不知道到底是爲什麼控制不與if語句中去,但我設法使其工作:

    int a = 4; 
    List<WebElement> allElements = driver.findElements(By.xpath("//div[@class='divClass']/ul[@class='ulClass']/li")); 
        for (WebElement element: allElements) { 
         String bText = element.getText(); 
         int b = Integer.parseInt(bText); 
         if (a != b) { 
          System.out.println(a + " = " + b + "? are not equal!"); 
         } else { 
          System.out.println(a + " = " + b + "? are equal!"); 
          element.click(); 
          break; 
         } 
        } 
    

    現在Eclipse的輸出是:

    1 = 4? are not equal! 
    2 = 4? are not equal! 
    3 = 4? are not equal! 
    4 = 4? are equal! 
    

    並點擊所需的元素!

    相關問題