2017-05-01 18 views
-1

@dataproviderを使用して複数のデータセットを使用したテストシナリオを自動化します。たとえば、Excelシートに3行のデータがある場合は、テストメソッドを3回実行する必要があります。特定のポイントまで自動化するとうまく動作します。 以下のコードに示すとおりです。しかし、私はいくつかのより多くの機能を自動化するスクリプトを記述した場合、それは1回実行され、エラーがスローされます。org.openqa.selenium.WebDriverException:不明なエラー:

org.openqa.selenium.WebDriverException:不明なエラー: 要素...はクリッカブル

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

ではありません、それはですここまでうまく動いていますが、これの後に、私は以下のコードを一度に含むようにしてください。 1回実行すると、@ dataproviderはすべてのデータを3行で返します。バック

//InitDriver.driver.navigate()();:私はあなたが要素にのSendKeysしようとしている前に、実行

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

答えて

0

は、次のコード行を追加するためにやったこの:。

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"))); 
関連する問題