2016-04-22 16 views
0

Ich habe mit Selen in Java gespielt und bin auf ein Problem gestoßen, das ich nicht herausfinden kann.org.openqa.selenium.ElementNotVisibleException Klicken Sie auf "Weiter"

auf dieser Seite hier: http://www.legalcontracts.com/contracts/lease-agreement-form/?ldcn=menu+name

von der dritten Seite gehen (Adresse Seite) mit den vierten ich in der Lage bin die Adresse einzustellen:

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

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

aber wenn ich versuche weiterhin

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

Ich bekomme eine org.openqa.selenium.ElementNotVisibleException. Die Schaltfläche "Weiter" hat die gleiche ID @FindBy wie die vorherige Seite, also bin ich mir nicht sicher, ob das etwas damit zu tun hat. Ich habe versucht, viele verschiedene Möglichkeiten zu versuchen, damit umzugehen, aber die einzige Möglichkeit, die zu arbeiten scheint, ist thread.sleep, die keine gute Möglichkeit ist, dies zu handhaben.

Dinge, die ich habe versucht:

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; } } 
    } 

ich in der vorherigen Seite mit der gleichen kommen weiter, aber in einer anderen Seite Objekt:

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

Könnte sein, Selen die aktuelle Taste weiterhin verwirrend mit Der vorherige?

Antwort

0

den Code unten verwenden:

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(); 

die cssSelector anstelle von XPath, was ich oben erwähnt auf die Schaltfläche weiter klicken.

+0

@radiator, funktioniert das ??? – noor

+0

Ich versuche, keine thread.sleeps in meinem Code zu verwenden. Wenn ich einen Schlaf benutze funktioniert alles ok, aber es ist keine Garantie, dass der Klick funktioniert – eradicator

+0

Ich benutze dies nur für Testzwecke ..... keine Notwendigkeit, diese Wartezeit zu verwenden ..... Sie können auf Weiter-Taste ohne klicken Das warte .... du hast gesagt, dass du nicht auf "Weiter" klicken kannst ... benutze einfach meinen CSS-Pfad für diesen Klick – noor

Verwandte Themen