2017-12-11 17 views
-1

다음 시나리오에서 문제가 발생합니다. 제발 도와주세요. <MF> 폴더에 Scenario-동적 요소에 대한 xpath를 쓸 수 없습니다.

  1. 개방 URL- https://member.bseindia.com/
  2. 을 클릭합니다.
  3. <COMMON>을 클릭하십시오.
  4. <DEC-2017> 폴더를 클릭하십시오. <Current date> 폴더에
  5. 클릭

<Current date> 폴더는 매일 동적으로 생성된다.

코드를 작성했지만 동적 폴더의 xpath를 쓸 수 없습니다. 전 -11-12-2017

public class bseIndia 
{ 
    String driverPath = "C:\\Users\\Public\\Public Desktop"; 
    public WebDriver driver; 
    @BeforeClass 
    public void setUp() 
    { 
     System.setProperty("webdriver.chrome.driver","F:\\Abhishek\\chromedriver.exe"); 
     driver = new ChromeDriver(); 
     driver.manage().window().maximize(); 

    } 
    @Test 
    public void nav() throws InterruptedException 
    { 
     System.setProperty("webdriver.gecko.driver", "F:\\Abhishek\\Document\\geckodriver.exe"); 
     System.setProperty("webdriver.chrome.driver", driverPath+"chromedriver.exe"); 
     driver.navigate().to("https://member.bseindia.com"); 
     driver.findElement(By.xpath("//a[@id='FileGridVB1_gvFiles_ctl06_lbFolderItem']")).click(); 
     driver.findElement(By.xpath("//a[@id='FileGridVB1_gvFiles_ctl02_lbFolderItem']")).click(); 
     driver.findElement(By.xpath("//a[@id='FileGridVB1_gvFiles_ctl02_lbFolderItem']")).click(); 
     //driver.findElement(By.xpath("//a[@id='FileGridVB1_gvFiles_ctl06_lbFolderItem']")).click(); 
     Date date=new Date(); 
     SimpleDateFormat sm = new SimpleDateFormat("dd-mm-yyyy"); 
     driver.findElements(By.xpath("//a[@id='FileGridVB1_gvFiles_ctl02_lbFolderItem']")); 
     boolean b= driver.findElements(By.xpath("//a[@id='FileGridVB1_gvFiles_ctl02_lbFolderItem']")).contains(sm.format(date)); 
     if(b==true) 
     { 
     here I have write the xpath for dynamic folder. 
     } 

    } 

} 
+0

나는 당신의 문제를 얻지 못한다. 정확하게 무엇을하려 하는가? 당신은 이미'if (b == true)'폴더를 찾았고 폴더를 가지고 있습니다. – Edwin

+0

@Edwin 'b'를 지정하는 코드가 작동하지 않습니다. – JeffC

답변

1

나는 약간 다르게 할 것입니다. 저는 일반적으로이 작업을 반복하고있는 곳을 보면서 그것을 처리 할 일반적인 기능을 찾으려고 노력합니다. 이 경우 특정 예상 이름이 지정된 폴더를 클릭하고 있습니다. 그런 다음 해당 케이스를 처리 할 수 ​​있도록 clickOnFolder(String folderName) 함수를 작성합니다. 그런 다음 폴더를 클릭해야 할 때마다 해당 함수를 호출하면됩니다. 코드는 XPath를 사용

public static void clickOnFolder(String folderName) 
{ 
    driver.findElement(By.xpath("//a[contains(., '" + folderName + "')]")).click(); 
} 

아래, 우리는 그것을 "MF"또는 "공통"나 오늘 날짜이든 폴더 이름의 텍스트를 포함하는 A 태그를 찾는 것입니다. 이 일반 기능을 사용하여 폴더를 클릭 할 수 있습니다.

귀하의 질문 중 하나는 오늘 날짜까지 폴더를 찾아야한다는 것입니다. 일/월/년을 포함하는 최종 폴더 이름을 요청했으나 포함 폴더가 제대로 작동하려면 폴더 이름이 실제로 필요합니다 (DEC-2017).

이 날짜를 처리하려면 오늘 날짜를 원하는 형식으로 가져와 XPath를 사용하여 폴더를 나타내는 A 태그를 찾아야합니다. 오늘 날짜를 적절한 형식으로 가져 오는 코드는 다음과 같습니다.

아래 코드를 테스트 한 결과 작동했습니다. boolean b 시작

String url = "https://member.bseindia.com/"; 
driver.navigate().to(url); 

// get date formats for folder names 
LocalDateTime currentTime = LocalDateTime.now(); 
String todaysDate = currentTime.format(DateTimeFormatter.ofPattern("dd-MM-yyyy")); 
String monthYear = currentTime.format(DateTimeFormatter.ofPattern("MMM-yyyy")).toUpperCase(); 

clickOnFolder("MF"); 
clickOnFolder("COMMON"); 
clickOnFolder(monthYear); 
clickOnFolder(todaysDate); 

귀하의 코드 라인은 여러 가지 이유로 작동하지 않습니다. 당신이 사용하는

  1. 개별 요소, 예를 들어 볼 필요가 있도록 컬렉션을 반환 (복수) .findElements().get(0), 비교를 할 수 있습니다.

  2. 항상 실패 할 StringWebElement을 비교합니다. 원하는 것은 driver.findElement(locator).getText().contains("some string");입니다.

  3. 날짜 형식은 mm입니다. 날짜 형식은 월이 아닌 분을 의미합니다. 너는 MM을 원한다.