2017-07-05 2 views
-8

ich auf dieser Seite binFehler "kein solches Element: Nicht imstande Element zu lokalisieren"

https://login.alibaba.com/?spm=a2700.8293689.0.0.NdeZUw&tracelog=hd_signin

Und versuchen, E-Mail-Feld zuzugreifen, indem Web-Elemente-Code folgenden:

public static WebElement Email_Field(WebDriver driver) throws InterruptedException { 

     //element = (new WebDriverWait(driver, 10)).until(ExpectedConditions 
       //.visibilityOfElementLocated(By.xpath("//input[@id='fm-login-id']"))); 

     element = driver.findElement(By 
       .xpath("//input[@id='fm-login-id']")); 

     while (!isDisplayed(element)) { 
      Thread.sleep(3000); 
      System.out.println("Element is not visible yet"); 
     } 

     return element; 
    } 


public static boolean isDisplayed(WebElement element) { 
     try { 
      if(element.isDisplayed()) 
       return element.isDisplayed(); 
      }catch (NoSuchElementException ex) { 
      return false; 
     } 
     return false; 
    } 

Aber immer die folgende Ausnahme:

Exception in thread "main" org.openqa.selenium.NoSuchElementException: no such element: Unable to locate element: {"method":"xpath","selector":".//*[@id='fm-login-id']"} 
    (Session info: chrome=59.0.3071.115) 
+0

Überlegen Sie, das HTML-DOM zu aktualisieren. Danke – DebanjanB

+0

Ihr Fehler sagt Ihnen über das Element './/*[@ id = 'fm-login-id']' aber ich kann '// Eingabe [@ id = 'fm-Login-ID']' in Ihrem Code sehen . Warum gibt es einen Unterschied? –

+0

Die Information, die er sucht, ist im 'iframe' - vielleicht lädt der Rahmen danach. Erwägen Sie, auf das DomReady-Ereignis usw. zu warten. Wenden Sie sich an Ihre Web-Treiber-API. –

Antwort

0

Das E-Mail-Feld befindet sich innerhalb des Rahmens. Bevor Sie auf ein Element im Rahmen zugreifen, müssen Sie wechseln. Bitte versuchen Sie den folgenden Code.

public static WebElement Email_Field(WebDriver driver) throws InterruptedException { 

    WebElement element; 

    (new WebDriverWait(driver, 30)).until(ExpectedConditions.frameToBeAvailableAndSwitchToIt("alibaba-login-box")); 

    element = driver.findElement(By.xpath("//input[@id='fm-login-id']")); 

    while (!isDisplayed(element)) { 
     Thread.sleep(3000); 
     System.out.println("Element is not visible yet"); 
    } 

    return element; 
} 
Verwandte Themen