2016-04-22 2 views
0

Я играл с селеном в java, и я столкнулся с проблемой, которую я не могу понять.org.openqa.selenium.ElementNotVisibleException нажатие кнопки продолжения

на этой странице здесь: http://www.legalcontracts.com/contracts/lease-agreement-form/?ldcn=menu+name

происходит с третьей страницы (адрес страницы) к четвертому я в состоянии установить адрес:

@FindBy(xpath="//div[@class=' qd spropertyAddress']/div[@class='ans']/input") 
    private WebElement address; 

public void SetAddress(String addressName){ 
     address.sendKeys(addressName); 
    } 

, но когда я пытаюсь продолжить

@FindBy(xpath="//a[contains(text(),'Continue')]") 
    private WebElement continuebutton; 
continuebutton.click(); 

Я получаю org.openqa.selenium.ElementNotVisibleException. Кнопка продолжения - это тот же идентификатор @FindBy, что и предыдущая страница, поэтому я не уверен, что это связано с этим. Я пробовал много разных способов, чтобы попытаться справиться с этим, но единственный способ, который, кажется, работает, - это thread.sleep, который не является отличным способом справиться с этим.

вещи, которые я пробовал:

WebDriverWait wait = new WebDriverWait(driver,30); 
     wait.until(ExpectedConditions.elementToBeClickable(continuebutton)); 
     wait.until(ExpectedConditions.elementToBeClickable(continuebutton)); 
     wait.until(ExpectedConditions.presenceOfElementLocated((By) continuebutton)); 
     wait.until(ExpectedConditions.visibilityOfElementLocated((By) continuebutton)); 


public void waitForJQuery(WebDriver driver) { 
    (new WebDriverWait(driver, 10)).until(new ExpectedCondition<Boolean>() { 
     public Boolean apply(WebDriver d) { 
      JavascriptExecutor js = (JavascriptExecutor) d; 
      return (Boolean) js.executeScript("return !!window.jQuery && window.jQuery.active == 0"); 
     } 
    }); 
} 

public void waitForJavaScript(WebDriver driver){ 
    (new WebDriverWait(driver, 10)).until(new ExpectedCondition<Boolean>() { 
     public Boolean apply(WebDriver driver) { 
      return ((JavascriptExecutor)driver).executeScript("return document.readyState").equals("complete"); 
     } 
    } 
); 

public void checkPageIsReady(WebDriver driver) { JavascriptExecutor js = (JavascriptExecutor)driver; //Initially bellow given if condition will check ready state of page. 

    if (js.executeScript("return document.readyState").toString().equals("complete")){ 
     System.out.println("Page Is loaded."); 
     return; 
     } 

    //This loop will rotate for 25 times to check If page Is ready after every 1 second. 
    //You can replace your value with 25 If you wants to Increase or decrease wait time. 
    for (int i=0; i<25; i++){ 
     try { 
      Thread.sleep(1000); } 
     catch (InterruptedException e) {} 

     //To check page ready state. 
     if (js.executeScript("return document.readyState").toString().equals("complete")){ 
      break; } } 
    } 

Я пришел в с предыдущей страницы с тем же продолжать, но в другой странице объекта:

@FindBy(xpath="//a[contains(text(),'Continue')]") 
    private WebElement continuebutton; 
continuebutton.click(); 

Может селеном быть запутанным ток кнопку продолжить предыдущий?

ответ

0

использовать следующий код:

driver.findElement(By.cssSelector("div.ans>input#ctl00_Content_ctrlQuestions_ctl194_ctl21_ctl06_ctl01_ctl01_ctl01_in")).click(); 

driver.findElement(By.cssSelector("div.ans>input#ctl00_Content_ctrlQuestions_ctl194_ctl21_ctl06_ctl01_ctl01_ctl01_in")).clear(); 

driver.findElement(By.cssSelector("div.ans>input#ctl00_Content_ctrlQuestions_ctl194_ctl21_ctl06_ctl01_ctl01_ctl01_in")).sendKeys("ur address"); 

Thread.sleep(2000); 

//click on continue button 

driver.findElement(By.cssSelector(" .largeProceedButton.continueButtonnContinueFirst.nContinue")).click(); 

использовать CSSSelector вместо XPath, что я упомянул выше, нажмите на кнопку продолжить.

+0

@eradicator, это сработало ??? – noor

+0

Я пытаюсь не использовать thread.sleeps в моем коде. Если я использую сон, все работает нормально, но это не гарантия того, что щелчок будет работать. – eradicator

+0

Я просто использую это для целей тестирования ..... не нужно использовать это ожидание ..... u можете нажать кнопку продолжения без это ожидание .... я сказал, что не могу нажимать на кнопку продолжения ... просто используйте мой css-путь для этого щелчка – noor

Смежные вопросы