2017-10-04 1 views
-1

Je souhaite sélectionner un élément avec du texte spécifique à partir du code HTML à l'aide de JSoup. Le code HTML estUtilisation de Jsoup pour trouver un élément avec un texte particulier

 <div class="logonContainer" style="padding-left: 300px; background-color: #3d5fa3; padding-top: 110px"> 
     <div id="bglogodiv" style="background-image: url(15.0.847/themes/resources/ctslogo.jpg); border-radius: 25px; width: 800px"> 
      <br /> 
      <br /> 
      <div id="lgnDiv" class="logonDiv" onkeypress="return checkSubmit(event)"> 
      <div class="signInImageHeader" role="heading" aria-label="Outlook Web App "> 
      <img class="mouseHeader" src="/owa/auth/15.0.1263/themes/resources/owa_text_blue.png" alt="Outlook Web App " /> 
      </div> 
      <div> 
      <div id="right" style="width: auto; float: right"> 
      <div class="signInInputLabel" id="userNameLabel" aria-hidden="true"> 
       User name: 
      </div> 
      <div> 
       <input id="username" name="username" class="signInInputText" role="textbox" aria-labelledby="userNameLabel" /> 
      </div> 
      <div class="signInInputLabel" id="passwordLabel" aria-hidden="true"> 
       Password: 
      </div> 
      <div> 
       <input id="password" onfocus="g_fFcs=0" name="password" value="" type="password" class="signInInputText" aria-labelledby="passwordLabel" /> 
      </div> 
      <div> 
       <input id="passwordText" onfocus="g_fFcs=0" name="passwordText" value="" style="display: none;" class="signInInputText" aria-labelledby="passwordLabel" /> 
      </div> 
      <div class="showPasswordCheck signInCheckBoxText"> 
       <input type="checkbox" id="showPasswordCheck" class="chk" onclick="showPasswordClick()" /> 
       <span>Show password</span> 
      </div> 
      </div> 

Je suis en mesure de trouver l'élément à l'aide id d'entrée pour nom d'utilisateur et mot de passe et passer mes lettres de créance statiques pour l'aide du code ci-dessous. Je veux que mon code trouve ces éléments dynamiquement pendant l'exécution en utilisant des mots-clés et transmette les informations d'identification statiques. Comment ferais-je cela? Je ne peux pas connaître l'id d'élément, le texte ou le xpath pendant l'exécution cela peut être n'importe quoi. Veuillez suggérer comment cela peut être fait ou aidez-moi avec un exemple de travail.

import java.util.List; 
import java.util.concurrent.TimeUnit; 

import org.jsoup.Jsoup; 
import org.jsoup.nodes.Element; 
import org.jsoup.select.Elements; 
import org.junit.Assert; 
import org.openqa.selenium.By; 
import org.openqa.selenium.WebDriver; 
import org.openqa.selenium.WebElement; 
import org.openqa.selenium.chrome.ChromeDriver; 
import org.w3c.dom.Document; 


public class Dynamic_LoginPass { 

    public static final String Username = "admin"; 

    public static final String Password = "admin"; 

    public static void main(String[] args) throws InterruptedException { 
     // TODO Auto-generated method stub 
     System.setProperty("webdriver.chrome.driver","D:\\Eclipse\\workspace\\PopUp_Test\\lib\\chromedriver.exe"); 


     WebDriver driver = new ChromeDriver(); 
     driver.manage().window().maximize(); 

     driver.get("https://www.nature.com/"); 
     try { 
       TimeUnit.SECONDS.sleep(5); 
      } catch (InterruptedException e) { 
       e.printStackTrace(); 
      } 
      String windowHandle = driver.getWindowHandle(); 
      Assert.assertNotNull(windowHandle); 

     Thread.sleep(10000); 

     //driver.findElement(By.xpath("//*[@id=\"easycont\"]/div/div[2]/div[2]/div[2]/button")).click(); 
     String html_content1 = driver.getPageSource(); 


     // Jsoup makes DOM here by parsing HTML content 
     org.jsoup.nodes.Document doc1 = Jsoup.parse(html_content1); 
     System.out.println("Result:"+doc1); 

     int test= doc1.select("div:contains(signInInputLabel)").size(); 
     System.out.println("testtesttesttest::"+test); 

      if(driver.findElement(By.cssSelector("input[id=username]")) != null){  
       driver.findElement(By.cssSelector("input[id=username]")).sendKeys(Username); 
       driver.findElement(By.cssSelector("input[id=password]")).sendKeys(Password); 
       driver.findElement(By.xpath("//*[@id=\"bglogodiv\"]/div[7]/div/span")).click(); 
       System.out.println("#############clicked################"); 
      } else if(driver.findElement(By.cssSelector("input[id=password]")) != null){ 

       System.out.println("clicked in else if"); 
      }  


    } 
} 

Merci à l'avance

+0

Veuillez affiner le HTML et le code pour les problèmes spécifiques. –

+0

@ M.leRutte Veuillez trouver le code HTML et le code mis à jour – syndy1989

Répondre

0

À mon avis, la meilleure façon d'utiliser la classe Jsoup FormElement. Vous pouvez vérifier comment cela doit être fait. In this example

Cette approche pratique utilise uniquement jsoup. Par conséquent, pas besoin de WebDriver.