2017-04-24 1 views
0

Java에서 WebElement를 찾지 못한 시도에 사용 된 로케이터를 가져 오는 방법이 있습니까? WhatWebElement 프록시에서 로케이터 가져 오기

내가하려고하는 것은 NoSuchElementException을 잡는 시점에서, Locator를보고 요소를 다시 찾기 전에 (id에서 xpath로 변경) 위치를 변경합니다. 나는 페이지 팩토리 패턴과 @FindBy(id=xxx)을 사용하고 있습니다. WebElement가 발견되기 전에 프록시 객체가 있다는 것을 알고 있습니다. 요소가 발견되지 않은 후 중단 점에서 Eclipse의 디버그보기에서 By Locator 정보를 볼 수 있지만 코드에서 추출 할 수 없습니다.

+0

당신이 로케이터로 변경하여 무엇을 의미합니까, 그건 정말 어리석은 방법입니다. 그것은 작동하지 않습니다. 작동하지 않는 것보다는 실제 문제 인 달성하려는 것을 설명 할 수 있습니다. –

+0

나는 그가 NoSuchElementException을 얻을 때 엘리먼트를 찾는 것을 다시 시도하려고한다고 생각한다. 엘리먼트가 잠시 후에 거기에 없다면, 암시 적/추측 대기에 대해 읽어라. –

+0

이 이유는 모든 요소를 ​​찾기 위해 ids와 xpath를 사용하는 기존의 셀렌 웹 자동화가 있다는 것입니다. Ionic Framework를 사용하여 클라이언트를 만들었으므로 모바일 클라이언트에이 코드 (테스트, 페이지 및 유틸리티)를 재사용하고 있습니다 (Appium 사용). 기본적으로 모바일 클라이언트에 랩된 웹 클라이언트입니다. 그러나 요소를 찾기 위해 xpath 만 사용해야한다는 것을 의미하는 우리의 Ionic 프레임 워크와 웹 뷰에는 특정 문제가 있습니다. 따라서 기존의 모든 페이지 클래스를 변경하지 않고도 waitForElement/doesElementExist 메서드에서 ID를 사용하고 xpath로 변경하려고합니다. – MikeG

답변

0

기다리는 방법은 다음과 같습니다. 요소가 폴링 시간 (예 : 10 초) 동안 존재하면 true/false를 반환합니다. 10 초 제한보다 이전에 존재하는 것으로 요소가 발견되면 루프는 중단되어 true를 반환합니다. 당연히 당신은 원하는 결과를 얻기 위해 timeOut을 가지고 놀 수 있습니다; 하지만 (같은 2 초), 그렇지 않으면 당신은 테이블이 아직로드되지 않았기 때문에 테스트가 가끔 실패 걸고 빨리 가지 마세요 :

public boolean waitForElement(String elementXpath, int timeOut) { 

try{      
WebDriverWait wait = new WebDriverWait(driver, timeOut); 
boolean elementPresent=wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath(elementXpath)).isDisplayed()); 

System.out.printf("%nElement is present [T/F]..? ")+elementPresent; 
}   
catch(TimeoutException e1){e1.printStackTrace();elementPresent=false;}   

    return elementPresent; 
}