2017-03-20 2 views
1

내 코드는 텍스트 상자에 키를 보내지 않지만 커서가 텍스트 상자에서 깜박이면서 올바른 요소를 찾습니다.sendKeys() 메서드가 키를 보내지 않습니다 아래에 언급 된

public class cl01 { 
public static void main(String[] args) { 
    System.setProperty("webdriver.gecko.driver","C:\\Program Files\\Java\\geckodriver-v0.14.0-win32\\geckodriver.exe"); 
    WebDriver driver = new FirefoxDriver(); 
    driver.get("http://www.rediff.com/"); 
    String P1 = driver.getWindowHandle(); 
    System.out.println(P1); 

    Set<String> windows = driver.getWindowHandles(); 
    Iterator<String> W = windows.iterator(); 

    while(W.hasNext()) 
    { 
     String C1 = W.next(); 
     System.out.println(C1); 
     if(!P1.equalsIgnoreCase(C1)) 
     { 
      driver.switchTo().window(C1).close(); 
     } 
    } 
    driver.switchTo().window(P1); 

    System.out.println("web page opened"); 

    //Browser's position is set 
    driver.manage().window().setPosition(new Point(30, 40)); 
    int height = driver.manage().window().getSize().getHeight(); 
    System.out.println("height of the browser is " +height); 

    int width = driver.manage().window().getSize().getWidth(); 
    System.out.println("width of the browser is " +width); 

    driver.manage().window().maximize(); 

    driver.findElement(By.linkText("Create a Rediffmail account")).click(); 
    System.out.println("sign up link opened"); 
    driver.findElement(By.xpath(".//*[@id='wrapper']/table[2]/tbody/tr[3]/td[3]/input")).sendKeys("ABC"); 
+0

어디 키를 보내려면 어떻게합니까? 귀하의 코드에서 찾을 수 없습니다. 아, 결국 그것을 보았습니다. 나는 당신이 잘못된 요소를 가지고 있다고 생각하고 그 요소를 올바르게 생각한다. sendKeys는 수년간 매우 안정적으로 작업하고 있습니다. 나는 일어날 일에 대한 당신의 해석이 잘못되었다고 생각합니다. 코드가 정확하게 수행해야합니다. –

+1

rediff.com에 액세스하려고하는 것으로 알고 있습니다. HTML DOM을 제공하여 도와 드리겠습니다. 질문 내에서 DOM을 업데이트하십시오. – DebanjanB

답변

2

코드가 잘 보입니다. 아마로드가 느리고 첫 번째 요소에 대한 대기 시간을 추가해야합니다.

중첩 된 레이어가 너무 깊고 인덱스를 사용하는 경우 특히 XPath를 사용하지 않는 것이 좋습니다. 그것은 매우 부서지기 쉬운 로케이터를 만듭니다. 아래 CSS 선택기를 사용합니다.

By.cssSelector("input[name^='name']") 

나는 이것을 테스트 한 결과 저에게 효과적이었습니다. 기본적으로 "이름"으로 시작하는 이름을 가진 INPUT 태그를 찾고 있습니다. 이름은 자동으로 생성 된 문자열처럼 보이지만이 부분은 페이지에서 고유합니다.

다음은 CSS 선택기에 대한 참고 자료입니다. CSS 셀렉터는 정말 강력하고 시간을 잘 배워야 배우기 쉽습니다.

CSS Selectors Reference

CSS Selectors Tips

+0

xpath 메서드를 명시 적 대기와 함께 사용했지만 xpath가 올바르더라도이 xpath가 작동하지 않는 이유를 알지 못합니다. 다음 코드를 사용했습니다 :'WebDriverWait wait = new WebDriverWait (driver, 15); \t \t wait.until (ExpectedConditions.elementToBeClickable (driver.findElement (by table /..// following :: tr/td/input [@ name = 'name9e6f78ab'] ")))); \t \t driver.findElement (By.xpath ("// table /..// following :: tr/td/input [@ name = 'name9e6f78ab']")) sendKeys ("ABC"); ' –

+0

나는 당신의 코드를 실행, 그것은 나를 위해 잘 작동합니다. :)'cssSelector'를 배울 수있는 곳에서 저를 제안 해 주시겠습니까? ' –

+0

답변을 업데이트하고 몇 가지 링크를 추가했습니다. – JeffC

관련 문제