2016-12-21 6 views
2

Ich versuche, auf SIGN IN Link zu klicken, der innerhalb des iframe mit Klassenattribut "modalIframe" platziert wird. Ich habe in den letzten zwei Tagen versucht, eine Lösung dafür zu finden, aber nicht in der Lage dazu. Jede Hilfe würde wirklich geschätzt werden.Nicht in der Lage zu iframe mit Selenium webdriver zu wechseln

-Code wie unten

public class Datereader 
{ 

    public static void main(String[] args) 
    { 
     System.setProperty("webdriver.gecko.driver","C:\\Users\\Madankumar\\Desktop\\Gecko Driver\\geckodriver.exe"); 
     WebDriver driver=new FirefoxDriver(); 
     driver.get("https://www.redbus.in/"); 
     driver.manage().window().maximize(); 
     driver.findElement(By.xpath(".//div[@class='icon-down icon ich dib']")).click(); 
     driver.findElement(By.id("signInLink")).click();  
     driver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS); 
     WebElement iframeElement=driver.findElement(By.xpath("//*[@class='modalIframe']")); 
     driver.switchTo().frame(iframeElement); 
     driver.findElement(By.linkText("sign in")).click(); 


    } 
} 

Auf den Code läuft ich unten Störung erhalte:

JavaScript warning: https://cdn-jp.gsecondscreen.com/static/tac.min.js , line 3: unreachable code after return statement

+0

können Sie nur vollständige Fehlerprotokoll – Giri

Antwort

0

Während die HTML zu erforschen und verschiedene XPATHs auszuprobieren, das Element zu finden, ist zu beobachten, dass es sind 3 elements vorhanden mit den gleichen Elementattributen. Also, um es einzigartig zu machen, bauen Sie die relative XPATH ab GooglePlus Signup Element, dann finden Sie die sign in Verbindung relativ dazu.

versuchen, den folgenden Code:

WebDriver driver=new FirefoxDriver(); 
    driver.get("https://www.redbus.in/"); 
    driver.manage().window().maximize(); 
    driver.findElement(By.xpath(".//div[@class='icon-down icon ich dib']")).click(); 
    driver.findElement(By.id("signInLink")).click();  
    driver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS); 
    WebElement iframeElement=driver.findElement(By.xpath("//*[@class='modalIframe']")); 
    driver.switchTo().frame(iframeElement); 
    WebElement elem = driver.findElement(By.xpath("//div[@id='googlePlusBtn1']/following-sibling::div/span/a")); 
    System.out.println("element " + elem); 
    Thread.sleep(1000); // without this line, observed that click is not resulting in displaying the Login form, though selenium did not throw any error (means, click did not result in Login form). you can alternatively try out with WebDriverWait. this is trial and error. if it is working for you without sleep, you can remove this line. 
    elem.click(); 
    Thread.sleep(5000); // can remove sleep. kept only for visual confirmaiton to check whether Login form is displayed, as there are no steps further after this in the code. 
+0

-Code teilen Antworten abgeraten. Sie sollten den Grund erklären, warum der OP-Code nicht funktioniert hat und wie Ihr das anspricht. Gibt es auch keine Möglichkeit, Thread.sleep() zu vermeiden? Es wird allgemein als ziemlich schlecht angesehen, es sei denn, es ist absolut notwendig – ExoticChimp

+0

@ExoticChimp, bearbeitete die Antwort, um Dinge zu erklären, die ich getan habe, um das Problem zu lösen. Danke für den guten Vorschlag. –

+0

Danke @Naveen. Der Code arbeitete mit WebDriverWait, während Thread.sleep() entfernt wurde. Auch in Bezug auf das SIGN IN-Element habe ich es mit linkText versucht, aber das hat auch nicht geklappt. – Madan

1

Verwenden Below-Code für iframe Handhabung.

WebElement iframe = driver.findElement(By.tagName("iframe")); 
driver.switchTo().frame(iframe);   //Move inside to the frame. 
WebElement body = driver.findElement(By.tagName("body")); 
body.click(); 
driver.findElement(By.linkText("sign in")).click(); 
driver.switchTo().defaultContent();  //Move outside to the frame. 
+0

Vielen Dank. Das hat für mich funktioniert. Ich habe stundenlang meinen Kopf gegen eine Wand geschlagen. Scheint der Körper Klick war die Antwort – mark1234

+0

Great .. !!! Bitte markieren Sie diese Antwort als "Akzeptiert", wenn Ihr Problem gelöst wurde, weil es auch für andere Benutzer hilfreich ist. –

+0

Ich habe es hochgestuft, aber aus irgendeinem Grund gibt es kein Häkchen zum Klicken – mark1234

Verwandte Themen