首页 > 解决方案 > Method to Return Full User Name

问题描述

I tried to create list of webelements of the labels and iterate through them but the method needs to accommodate different values passed when method is being called.

It should look something like this

public String getName(WebDriver driver, String fieldName)
{
  String fullName= null;
  .
  .
  .
  return fullName;
} 

标签: javaseleniumautomated-testsqa

解决方案


您必须两次找到父元素才能从所需的输入字段中获取标签“小”。

package selenium;

import java.util.List;

import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;

public class NatureValue extends WebDriverBase {

    public static void main(String[] args) {
        
        WebDriver driver = startChromeDriver();
        driver.get("https://qa.employeenavigator.com/benefits/Account/Register");
        String[] fieldNames = {"FirstName", "LastName", "CompanyIdentifier", "Last4OfSSN", "BirthDate"};
        for (String fieldName: fieldNames) {
            System.out.println("Field named '" + fieldName + "' has text: " + getSmallTxt(driver, fieldName));
        }
        driver.quit();
        
    }
    
    public static String getSmallTxt(WebDriver driver, String fieldName) {
        String smallTxt = null;
        List<WebElement> fieldElements = driver.findElements(By.name(fieldName));
        if (fieldElements.size() > 0) {
            WebElement fieldElement = fieldElements.get(0);
            WebElement parentElement = getParentElement(driver, fieldElement);
            WebElement parentParentElement = getParentElement(driver, parentElement);
            List<WebElement> smallTxtElements = parentParentElement.findElements(By.tagName("small"));
            if (smallTxtElements.size() > 0) {
                WebElement smallTxtElement = smallTxtElements.get(0);
                smallTxt = smallTxtElement.getText();
            }
        }
        if (smallTxt == null) {
            smallTxt = "No text found";
        }
        if (smallTxt.length() < 1) {
            smallTxt = "No text found";
        }
        return smallTxt;
    }
    
    
    public static WebElement getParentElement(WebDriver driver, WebElement element) {
        JavascriptExecutor javascriptExecutor = (JavascriptExecutor) driver;  
        WebElement parentElement = null;
        parentElement = (WebElement) javascriptExecutor.executeScript("return arguments[0].parentNode;", element);
        return parentElement;
    }
    
}

输出:

Starting ChromeDriver 91.0.4472.101 (af52a90bf87030dd1523486a1cd3ae25c5d76c9b-refs/branch-heads/4472@{#1462}) on port 26426
Only local connections are allowed.
Please see https://chromedriver.chromium.org/security-considerations for suggestions on keeping ChromeDriver safe.
ChromeDriver was started successfully.
Čvc 07, 2021 8:51:23 DOP. org.openqa.selenium.remote.ProtocolHandshake createSession
INFO: Detected dialect: W3C
Field named 'FirstName' has text: No text found
Field named 'LastName' has text: No text found
Field named 'CompanyIdentifier' has text: (provided by HR)
Field named 'Last4OfSSN' has text: (Last 4 Digits of SSN / ID)
Field named 'BirthDate' has text: (mm/dd/yyyy)

推荐阅读