当前位置: 首页 > 知识库问答 >
问题:

Selenium Webdriver:由于返回类型未知,可重用xml解析类方法不工作

拓拔富
2023-03-14

1)我创建了一个xml文件,如下所示:

 <SearchStrings>
    <Search id="1111" type="high">
        <Questions>What is software Testing?</Questions>
        <Tips>How to connect database with eclipse ?</Tips>
        <Multiple>Who was the first prime minister of India? </Multiple>
        <Persons>Who is Dr.APJ Abdul Kalam </Persons>
    </Search>
   <Search id="2222" type="low">
        <Questions>What is Automation Testing?</Questions>
        <Tips>How to use selenium webdriver </Tips>
        <Multiple>Who was the fourth prime minister of India? </Multiple>
        <Persons>Who is Superman? </Persons>
    </Search>    
    <Search id="3333" type="medium">
        <Questions>What is Selenium ide  Testing?</Questions>
        <Tips>How to use selenium webdriver with eclipse  ? </Tips>
        <Multiple>Who was the ninth prime minister of India? </Multiple>
        <Persons>Who is Spiderman? </Persons>
    </Search>  
     <Search id="4444" type="optional">
        <Questions>What is database Testing?</Questions>
        <Tips>How to use Class in java ? </Tips>
        <Multiple>Who was the eight prime minister of India? </Multiple>
        <Persons>Who is motherindia? </Persons>
    </Search>  
</SearchStrings>

2)创建一个类,该类一次获取标签的节点,并将它们全部存储在String [] SearchString中,然后使用该数组获取值和by。sendKeys(值)属性在google上搜索它们。

简化:

1)以可重用的数据类型存储元素标签元素我的知识有限,所以使用字符串数组。2)获取字符串数组元素,并使用。谷歌的sendkeys(元素)。

我的代码如下:

 package searchexperiment;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.IOException;
    import java.util.concurrent.TimeUnit;

    import javax.xml.parsers.DocumentBuilder;
    import javax.xml.parsers.DocumentBuilderFactory;
    import javax.xml.parsers.ParserConfigurationException;
    import javax.xml.xpath.XPath;
    import javax.xml.xpath.XPathConstants;
    import javax.xml.xpath.XPathExpressionException;
    import javax.xml.xpath.XPathFactory;

    import org.openqa.selenium.By;
    import org.openqa.selenium.WebDriver;
    import org.openqa.selenium.WebElement;
    import org.openqa.selenium.firefox.FirefoxDriver;
    import org.w3c.dom.Document;
    import org.w3c.dom.NodeList;
    import org.xml.sax.SAXException;

    public class Experiment implements Paths
    {
    public static WebDriver driver;
    static Document document;
    static DocumentBuilder db;
    public static void main(String args[])
    {
        String[] SearchStrings;
        driver=new FirefoxDriver();
        driver.manage().timeouts().implicitlyWait(50, TimeUnit.SECONDS);
        driver.get("https://www.google.com/");

        //loading xml as test data

        WebElement googlebox=driver.findElement(By.id("gbqfq"));
        try {
            FileInputStream file = new FileInputStream(new File(test_xml));

            DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();

            DocumentBuilder builder =  builderFactory.newDocumentBuilder();

            Document xmlDocument = builder.parse(file);

            XPath xPath =  XPathFactory.newInstance().newXPath();

            System.out.println("*************************");
            String expression="/SearchStrings/Search/Questions";
            System.out.println("This is ordered expression \n"+expression);
            NodeList nodeList = (NodeList) xPath.compile(expression).evaluate(xmlDocument, XPathConstants.NODESET);
            for(int i=0;i< nodeList.getLength();i++)
            {
                 // Node nNode = emailNodeElementList.item(j);
                //  Element eElement = (Element) nNode;
                System.out.println("Taking the loop value");
// below push is not working.
                Object array = push(SearchStrings[i],nodeList.item(i).getFirstChild().getNodeValue());
                  String text=nodeList.item(i).getFirstChild().getNodeValue();  
                  googlebox.clear();
                  googlebox.sendKeys(text);
                  System.out.println("Closing the loop value");

            }

我使用字符串数组是为了使xml解析类可重用。我使用接口获取文件名

public interface Paths {
String test_xml="XML/Searchtext.xml";
}

共有1个答案

徐嘉谊
2023-03-14

可重用的方法和类是:

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathFactory;

import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

import searchexperiment.Paths;
public class DocBuilderClass implements Paths
{

public static String[] username() 
{
    String[] SearchElements=new String[4];
    try
    {
        FileInputStream file = new FileInputStream(new File(test_xml));

        DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();

        DocumentBuilder builder =  builderFactory.newDocumentBuilder();
         Document xmlDocument = builder.parse(file);

        XPath xPath =  XPathFactory.newInstance().newXPath();

        System.out.println("*************************");
        String expression="/SearchStrings/Search/Tips";
        System.out.println("This is ordered expression \n"+expression);
        NodeList nodeList = (NodeList) xPath.compile(expression).evaluate(xmlDocument, XPathConstants.NODESET);
        //int size=
        for(int i=0;i< nodeList.getLength();i++)
        {
             // Node nNode = emailNodeElementList.item(j);
            //  Element eElement = (Element) nNode;
            System.out.println("Taking the loop value");
            //Object array = push(SearchStrings[i],nodeList.item(i).getFirstChild().getNodeValue());
              String text=nodeList.item(i).getFirstChild().getNodeValue();  
              //googlebox.clear();
             // googlebox.sendKeys(text);
              SearchElements[i]=text;
              System.out.println("Closing the loop value");

        }

    }
    catch(Exception ex)
    {
    System.out.println("This is a exception" + ex);
    }
    finally
    {

    }
    return SearchElements;

}   
}

然后调用类的方法如下:

String [] namelist=DocBuilderClass.username();
    for(int i=0;i<namelist.length;i++)
    {

        String abc=namelist[i];

        googlebox.sendKeys(abc);
        googlebox.clear();
        googlebox.sendKeys(namelist[i]);


    }

引用是引用链接字符串 [] 数组

引用链接 XML 分析

我所学到的是,你的基础应该是强大的,以解决强大而复杂的问题。

 类似资料:
  • 问题内容: 重写的方法可以有不同的返回类型吗? 问题答案: Java支持*协变返回类型的重写方法。这意味着重写的方法可能具有更特定的返回类型。也就是说,只要新的返回类型可分配给你要覆盖的方法的返回类型,就可以使用。 例如: 这在Java语言规范的8.4.5节中指定: 如果返回类型是引用类型,则返回类型在彼此覆盖的方法之间可能会有所不同。返回类型可替换性的概念支持协变返回,即返回类型到子类型的特殊化

  • 问题内容: 这就是我想要做的。使用反射,我想获取所有方法及其返回类型(非泛型)。我一直在这样做。但是,当我遇到返回类型未知的方法时,我遇到了限制。 我如何知道方法的返回类型是否通用?我没有奢求在运行时拥有对象。我正在尝试使用Google 或使用抽象类来获取类型信息。我想关联到对象的方法。 有人认为Java不保留通用信息。在这种情况下,为什么第一次强制转换有效而第二次强制转换无效。 任何帮助表示赞赏

  • 重写的方法可以有不同的返回类型吗?

  • 我正在使用和,在属性映射期间我遇到了这个错误,我该如何修复它? 她的是我的 这里有一个Screenshottenter图像描述

  • 在自学Java时,我遇到了一个关于方法类型/返回类型的令人困惑的部分? 例如,

  • 我有一个问题,从抽象类中重写泛型方法。 这是我的抽象类: 当我创建类(B)来实现类(a)时,如下所示: 显示了(getData)方法中的以下编译错误: ”“B。getData“(“字符串函数(字符串)”不是“a”的有效重写。getData'('字符串函数(类型)‘)。dart(无效覆盖) 以及返回语句中的此错误: 类型为“String”的值不能从方法'getData'返回,因为它的返回类型为'St