2017-05-01 10 views
-1

Automatisierung des Testszenarios mit mehreren Datensätzen mit @dataprovider, wenn ich zum Beispiel drei Datenzeilen in meinem Excel-Blatt habe, dann sollte meine Testmethode dreimal laufen läuft gut, wenn ich bis zu einem bestimmten Punkt automatisiere. Wie im folgenden Code gezeigt. aber wenn ich Skript schreiben, ein paar mehr Features zu automatisieren es für eine Zeit abläuft und wirft Fehler:org.openqa.selenium.WebDriverException: unbekannter Fehler:

org.openqa.selenium.WebDriverException: unbekannt Fehler: Element ... ist nicht anklickbar

package com.modular.framework.Functional_TestSuites; 

import java.util.List; 
import org.apache.log4j.Logger; 
import org.openqa.selenium.By; 
import org.openqa.selenium.WebElement; 
import org.openqa.selenium.support.ui.Select; 
import org.testng.annotations.DataProvider; 
import org.testng.annotations.Test; 
import com.modular.framework.Generic_Libraries.CommonFunctions; 
import com.modular.framework.Generic_Libraries.LoggerHelper; 
import com.modular.framework.Generic_Libraries.RetrieveXlsxData; 
import com.modular.framework.InitWebdriver.InitDriver; 

public class DemTest { 

    static Logger log = LoggerHelper.writeLog(ProfileDetailsTest.class); 
    static String Parent; 
    static String Child; 

    @DataProvider(name = "dataTest12") 
    public static Object[][] validationC() throws Exception { 

     String[][] testDataArr = RetrieveXlsxData.getTableArray(
       "E:/MavenProject/WebAutomation_msupply_2/WebAutomation_msupply_2/src/test/resources/First.xls", 
       "Sheet1"); 
     return testDataArr; 
    } 

    @Test(dataProvider = "dataTest12") 
    public void fillingProfile(String enquiryid, String brand, String baseRate, String vat, String deliveryType, 
      String creditDays, String data) throws Throwable { 

     CommonFunctions.LoadPageExpicitWait(); 


     Thread.sleep(3000); 
     InitDriver.driver.findElement(By.linkText("My Enquiries")).click(); 
     Thread.sleep(1000); 
     InitDriver.driver.findElement(By.linkText("Quote Pending")).click(); 

     new Select(InitDriver.driver.findElement(By.name("viewItemPerPage"))).selectByValue("number:50"); 

     Thread.sleep(2000); 
     selectEnquiryId(enquiryid); 

     Thread.sleep(3000); 

     log.info("filling the price"); 

     supplierInputs(brand, baseRate, vat, deliveryType, creditDays); 
    } 

    public void selectEnquiryId(String enquiryId) { 

     List<WebElement> enquiryIds = InitDriver.driver.findElements(By.xpath(
       "//table[@class='custom-enqtable']/tbody/tr/td//div[contains(text(),'Enquiry Number')]/following-sibling::div")); 

     List<WebElement> quoteBtns = InitDriver.driver.findElements(
       By.xpath("//table[@class='custom-enqtable']/tbody/tr/td//a[contains(text(),'Quote Now')]")); 

     for (int i = 0; i < enquiryIds.size() && i < quoteBtns.size(); i++) { 

      if (enquiryIds.get(i).getText().contains(enquiryId)) { 

       quoteBtns.get(i).click(); 
       break; 
      } 
     } 

    } 

    public void supplierInputs(String data1, String data2, String data3, String data4, String data5) throws Throwable { 

     log.info("Brand suggested : " + data1); 
     log.info("B Rate : " + data2); 
     log.info("VAT : " + data3); 
     log.info("If on credit opted : " + data4); 
     List<WebElement> inputFields = InitDriver.driver 
       .findElements(By.xpath("//tr[@id='addBrandTbl']//tbody//input")); 
     log.info("Itdentifying no. of fields"); 
     log.info("Total input fields :" + inputFields.size()); 
     for (int i = 0; i < inputFields.size(); i++) { 

      String ngModel = inputFields.get(i).getAttribute("ng-model"); 
      log.info(ngModel); 
      if (ngModel.contains("product.brand")) { 
       if (inputFields.get(i).getAttribute("class").contains("ng-valid ng-empty")) { 
        inputFields.get(i).sendKeys(data1); 
       } 

      } else if ((inputFields.get(i).getAttribute("ng-model")).contains("product.getRate")) { 

       inputFields.get(i).sendKeys(data2); 

      } else if ((inputFields.get(i).getAttribute("ng-model")).contains("product.VAT")) { 

       inputFields.get(i).sendKeys(data3); 

      } else if (data4.contains("On Credit") 
        && (inputFields.get(i).getAttribute("ng-model").contains("temp.paymentMode"))) { 

       inputFields.get(i).click(); 
       break; 

      } else if (data4.contains("On Delivery") 
        && (inputFields.get(i).getAttribute("value").contains("onDelivery"))) { 

       inputFields.get(i).click(); 
       break; 
      } 
     } 

     InitDriver.driver 
       .findElement(By.xpath(".//*[@id='addBrandTbl']/td/table/tbody/tr[2]/td/div/div[2]/label[1]/input[2]")) 
       .sendKeys(data5); 

     InitDriver.driver.findElement(By.xpath("html/body/div[3]/ng-view/div[3]/div/div[4]/div[1]/span[1]/img")) 
       .click(); 
     InitDriver.driver.findElement(By.xpath("html/body/div[4]/div[1]/table/tbody/tr[5]/td[4]")).click(); 
     new Select(InitDriver.driver 
       .findElement(By.xpath("html/body/div[3]/ng-view/div[3]/div/div[4]/div[1]/span[2]/select"))) 
         .selectByIndex(1); 

     InitDriver.driver.findElement(By.id("deliverytime1")).sendKeys("79"); 
     new Select(InitDriver.driver 
       .findElement(By.xpath("html/body/div[3]/ng-view/div[3]/div/div[4]/div[2]/span/select"))) 
         .selectByIndex(1); 

     new Select(InitDriver.driver 
       .findElement(By.xpath("html/body/div[3]/ng-view/div[3]/div/div[4]/div[3]/span/select"))) 
         .selectByIndex(1); 

     new Select(InitDriver.driver 
       .findElement(By.xpath("html/body/div[3]/ng-view/div[3]/div/div[4]/div[4]/span/select"))) 
         .selectByIndex(1); 

es ist läuft gut bis hierhin, aber danach, wenn ich unter Code einschließe läuft es für eine Zeit. Bei einmaliger Ausführung gibt @ dataprovider alle Daten in drei Zeilen zurück. .

//InitDriver.driver.navigate() zurück() ;: dies i run machen tat

/* 
    * InitDriver.driver.findElement(By.xpath(
    * "html/body/div[3]/ng-view/div[3]/div/div[6]/textarea")). 
    * sendKeys("Fill the text area"); 
    * 
    * InitDriver.driver.findElement(By.xpath(
    * "html/body/div[3]/ng-view/div[3]/div/div[8]/div[1]/div/label")).click 
    *(); 
    */ 

Antwort

0

Hinzufügen von Code folgende Zeile, bevor Sie auf Tastaturbefehle an das Element versuchen:

WebDriverWait wait = new WebDriverWait(InitDriver.driver, 20); 

wait.until(ExpectedConditions.elementToBeClickable(InitDriver.driver.findElement(By.xpath("html/body/div[3]/ng-view/div[3]/div/div[6]/textarea"))); 
Verwandte Themen