2016-02-15 89 views
2

以下是短節目&在以下網站: https://uk.webuy.com/search/index.php?stext= * &節= & CATID = 956的Java硒的webdriver無法第一項放入籃筐

我想點擊的前三個產品的「我要購買此物品「按鈕& 在頁面右側的VIEW BASKET中查看它們。

出於某種原因,我只能看到第二個和第三個產品。出於某種原因,第一件產品永遠不會讓它進入籃子,&它不會產生錯誤。

只有當我更改以下行:

allButtons.get(0).click(); 

到:

allButtons.get(0).click(); 
    allButtons.get(0).click(); 
    allButtons.get(0).click(); 

我會看到在籃下的第一款產品之一發生。

我在做什麼錯?有什麼缺失導致這個問題?

使用Java 1.8 硒WebDrive版本號2.48 Mac OS版本#13年11月10日

謝謝

public class ZWeBuy { 


     static WebDriver driver; 

     @Test 
     public void testProductPurchaseProcess() {  
      driver = new FirefoxDriver(); 
      driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); 
      driver.manage().window().maximize(); 
      driver.get("https://uk.webuy.com/search/index.php?stext=*&section=&catid=956"); 
      closePopupIfPresent(); 

      //xpath for all product names in this page 
      List<WebElement> allNames = driver.findElements(By.xpath("//div[@class='searchRecord']/div[2]/h1/a")); 
      List<WebElement> allButtons = driver.findElements(By.xpath("//div[@class='action']/div/a[2]/div/span"));              

      System.out.println("Total names = "+ allNames.size()); 
      System.out.println("Total buttons = "+ allButtons.size()); 
      System.out.println("I= " + 0 + " PRDCT: --- " +allNames.get(0).getText()); 
      allButtons.get(0).click(); 
      WebDriverWait wait = new WebDriverWait(driver,120); 
      wait.until(ExpectedConditions.elementToBeClickable(By.xpath("html/body/div[5]/div[1]/div[3]/div[5]/div[1]/div[1]/div[3]/div/a[2]/div/span"))); 
      System.out.println("I= " + 1 + " PRDCT: --- " +allNames.get(1).getText()); 
      allButtons.get(1).click(); 
      System.out.println("I= " + 2 + " PRDCT: --- " +allNames.get(2).getText()); 
      allButtons.get(2).click(); 


      } 

      public static void closePopupIfPresent(){ 

       Set<String> winIds = driver.getWindowHandles(); 
       System.out.println("Total windows -> "+ winIds.size()); 

       if(winIds.size() == 2){ 
        Iterator<String> iter = winIds.iterator(); 
        String mainWinID = iter.next(); 
        String popupWinID = iter.next(); 
        driver.switchTo().window(popupWinID); 
        driver.close(); 
        driver.switchTo().window(mainWinID); 

       } 

      } 
} 

回答

0

您的代碼不起作用。彈出式關閉邏輯不起作用,它實際上不是一個單獨的窗口,而是一個對話框在同一窗口內。你還應該考慮簡化你的選擇器。好吧,說,這裏是工作和測試代碼。

WebDriver driver = new FirefoxDriver(); 
WebDriverWait wait = new WebDriverWait(driver, 30); 
driver.get("https://uk.webuy.com/search/index.php?stext=*&section=&catid=956"); 
WebElement element; 
try { 
    element = driver.findElement(By.cssSelector(".deliver-component-wrapper>a>div")); 
    System.out.println("Closing pop up"); 
    element.click(); 
} catch (NoSuchElementException e) { 
    System.out.println("Alright, no such dialog box, move on"); 
} 

List<WebElement> buyButtons = wait.until(ExpectedConditions.visibilityOfAllElementsLocatedBy(By.cssSelector(
     "span.listBuyButton_mx"))); 
Assert.assertTrue("Less than three buttons found", buyButtons.size() >= 3); 
for (int i = 0; i < 3; i++) { 
    WebElement buyButton = buyButtons.get(i); 
    wait.until(ExpectedConditions.elementToBeClickable(buyButton)).click(); 
    System.out.println("Clicked Buy Button " + (i + 1)); 
} 
WebElement basketCount = wait 
     .until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("#buyBasketRow>td.basketTableCell"))); 
System.out.println(basketCount.getText()); 
driver.quit(); 

它打印

Closing pop up 
Clicked Buy Button 1 
Clicked Buy Button 2 
Clicked Buy Button 3 
3 item/s 
+0

謝謝你,這個代碼,工作得很好,我可以在病房後看到籃子裏的三種產品。 – Fariba

+0

非常感謝@Fariba。你能接受答案嗎? – nilesh

+0

我接受答案,謝謝 – Fariba

0

您的瀏覽器無法呈現的是第一個按鈕。您可以在每次點擊事件之前放置wait.until()方法。 請嘗試此操作

WebDriverWait wait = new WebDriverWait(driver,120); 
    wait.until(ExpectedConditions.elementToBeClickable(By.xpath("/html/body/div[5]/div[1]/div[3]/div[5]/div[1]/div[1]/div[3]/div/a[1]/div/span"))); 
    allButtons.get(0).click(); 
+0

我不能這樣做,因爲我需要點擊「我要購買」按鈕,使項目在籃下顯示出來。單擊按鈕之前等待將不會執行任何操作。當我在每個Button.click()後面放置等待語句時,它會等待,並且測試NG告訴我測試已通過,但是當我查看籃子時,我只在籃子中找到一個項目,而不是三個!不知何故,它不起作用。 – Fariba