2013-08-01 6 views
0

셀렌 2.0을 사용하여 코드를 자동화하고 있습니다. 목록에서 한 명 (또는 여러 명)의 사용자를 선택합니다. 그런 다음 그리드에서 사용자 이름을 볼 수있게하는 추가 버튼을 클릭합니다. 각 사용자는 그리드에 표시 될 때 유효한 Xpath를 갖습니다. 그러나 사용자 이름이 표시되지 않으면 실제로 사라지는 모눈에서 모든 사용자 이름을 지운 후에도 Xpath는 여전히 null을 반환하지 않습니다. 객체 (사용자 이름)가 표시되지 않을 때 null을 반환하는지 확인하기 위해 Xpath를 사용하지만 예상대로 작동하지 않습니다. 내 문제를 해결할 다른 방법이 있습니까? 나는 셀레늄으로 꽤 새로운 사람이다. 나는 셀레늄 2.0을 사용하고있다. Bellow는 제 코드의 일부입니다. 귀하의 도움은 매우 감사하겠습니다.웹 객체가 보이지 않아도 Xpath가 발견되었습니다.

먼저 당신의 XPath는 그것이 사용자가 아닌 다른 요소를 선택하는 것입니다 충분히 일반적이기 때문이다 :

//Check if user is present on the grid 
By checkuser = By.xpath(".//*[@id='sharing_list']/tbody/tr/td[1]/span"); 

//if the grid is not empty, which means the grid is visible... 
if(null!=checkuser) //where the problem is!! 
{ 
    //Click the button to erase the names in the grid, then the grid desapears 
    webDriver.findElement(By.xpath("//*[@id='sharing_list']/tbody/tr/td[4]/span")).click(); 
     Thread.sleep(2000); 

    //more code 
    //............ 

} 
+1

요소가 있습니다! = 표시됩니다. 너는 무엇을 기대 하느냐? 알기가 어렵습니다. 가능한 경우 HTML 또는 UI 스크린 샷을 표시하십시오. \ –

+0

html을 게시하십시오. null! = checkuser 코드는별로 의미가 없습니다. 하지만 실제로 요소가 있는지 알아 보려면 element.isDisplayed()를 사용할 수 있습니다. – Vinay

+0

if 논리는 논리적으로 올바르지 않습니다. 당신은 "null이 checkuser의 값과 같지 않다"라고 말하고 있습니다 ... "checkuser의 값이 null이 아닌 경우"... 그러면 어쨌든 왜'checkuser' 값이 null이 될까요? 무의미한 excerise 보인다. – Arran

답변

1

나는 두 가지가 여기에 일어나고 볼 수 있습니다. 이러한 경우인지 확인하려면 Chrome에서 페이지로 이동하여 필요한 작업을 수행하여 원하는 상태로 만드십시오. 그런 다음 Ctrl-Shift-J를 누르고 콘솔을 클릭 한 다음 $x("//*[@id='sharing_list']/tbody/tr/td[4]/span")을 입력하십시오. 그러면 Chrome에서 선택기가 선택하는 요소를 표시합니다.

당신의 작업은 다른 요소를 선택하는지 아니면 요소가 보이지 않는지를 식별하는 것입니다. 페이지에는 요소가 있지만 표시 할 수는 없으며 WebDriver는 보이지 않는 요소를 선택합니다 (By.linkText()을 수행하지 않는 한). 요소가 표시되는지 확인하려면 element.isDisplayed()을 수행하십시오.

+0

+1. T4000의 xpath ("tbody/tr/td [1]/span")의 마지막 부분은 위험 해 보입니다. 동적으로 업데이트되는 웹 페이지에서 xpath가 주어진 사용자의 세부 정보와 일치한다는 보장이 없습니다. 아마 ID 또는 내부 텍스트를 사용하는 대안 xpath를 조사 할 가치가 있습니다. 그들은 당신에게 사용자 정보에 대한 더 나은 수정을 줄 것입니다. –