Selenium和Java:如何获取WebElement之后的所有文本

Selenium和Java:如何获取WebElement之后的所有文本,java,selenium,selenium-webdriver,webdriver,Java,Selenium,Selenium Webdriver,Webdriver,我正在使用WebDriver用Java编写一个程序,在获取SELECTWebElement之后的文本时遇到了一点麻烦 我想要的网站部分的HTML代码如下: <select name="language" id="langSelect" style="width:100px;"> <option value="1" >Français</option>

我正在使用WebDriver用Java编写一个程序,在获取SELECTWebElement之后的文本时遇到了一点麻烦

我想要的网站部分的HTML代码如下:

    <select name="language" id="langSelect" style="width:100px;">
            <option value="1"  >Français</option>
    </select>
  </div>

  <div id="content">

    
            <div id="Pagination"></div>
    <div id="mid">
              </div>
  </div>

法国
用于搜索栏和语言下拉栏的文本框类代码

我的Java代码目前能够使用chrome驱动程序打开chrome,并且能够在搜索栏中键入内容。但是,我无法从条目中获取结果文本

在这里的图像中,我在搜索栏中输入了“avoir”,我希望框中的所有文本在xpath中没有使用任何id或名称

有人能帮我找到如何在下拉语言菜单后获取和保存这些字段中的文本吗

提前谢谢你

到目前为止,我掌握的代码是:

    <select name="language" id="langSelect" style="width:100px;">
            <option value="1"  >Français</option>
    </select>
  </div>

  <div id="content">

    
            <div id="Pagination"></div>
    <div id="mid">
              </div>
  </div>
//import statements not shown
    public class WebScraper  {
    public WebScraper() {
    
    }

    public WebDriver driver = new ChromeDriver();

    public void openTestSite() {
   
        driver.navigate().to(the URL for the website);
    }


    public void enter(String word) {

         WebElement query_editbox = 
         driver.findElement(By.id("query")); 
         query_editbox.sendKeys(word);
         query_editbox.sendKeys(Keys.RETURN);

    }

    public void getText()  {
        //List<WebElement> searchResults = 
        driver.findElements(By.xpath("//div[@id='mid']/div")); 
        // Writer writer = new BufferedWriter(new 
        OutputStreamWriter(new FileOutputStream("status.txt"), 
        "utf-8"));
        //int[] index = {0};

    WebElement result=driver.findElement(By.id("mid"));
    System.out.println(result.getText());
}

public static void main(String[] args) throws IOException  {
    System.setProperty("webdriver.chrome.driver", "chromedriver");        
    System.out.println("Hello");

    WebScraper webSrcaper = new WebScraper();
    webSrcapper.openTestSite();
    webSrcapper.enter("avoir");
    webSrcapper.getText();
    System.out.println("Hello");

}
//未显示导入语句
公共类WebScraper{
公共网络垃圾{
}
公共WebDriver驱动程序=新的ChromeDriver();
public void openTestSite(){
driver.navigate()。指向(网站的URL);
}
公共无效输入(字符串字){
WebElement查询\u编辑框=
driver.findElement(By.id(“查询”));
查询editbox.sendKeys(word);
query_editbox.sendKeys(key.RETURN);
}
public-void-getText(){
//列表搜索结果=
findElements(By.xpath(“//div[@id='mid']/div”);
//Writer Writer=new BufferedWriter(新的
OutputStreamWriter(新文件OutputStream(“status.txt”),
“utf-8”);
//int[]索引={0};
WebElement结果=driver.findElement(By.id(“mid”));
System.out.println(result.getText());
}
公共静态void main(字符串[]args)引发IOException{
System.setProperty(“webdriver.chrome.driver”、“chromedriver”);
System.out.println(“你好”);
WebScraper WebScraper=新建WebScraper();
openTestSite();
输入(“avoir”);
getText();
System.out.println(“你好”);
}

}

为了检查查询的相关结果,常用的策略是加载搜索结果列表:

    <select name="language" id="langSelect" style="width:100px;">
            <option value="1"  >Français</option>
    </select>
  </div>

  <div id="content">

    
            <div id="Pagination"></div>
    <div id="mid">
              </div>
  </div>
List<WebElement> searchResults = driver.findElements(By.xpath("//div[@id='mid']/div")); 
您将得到输出:

    <select name="language" id="langSelect" style="width:100px;">
            <option value="1"  >Français</option>
    </select>
  </div>

  <div id="content">

    
            <div id="Pagination"></div>
    <div id="mid">
              </div>
  </div>

我指定了三种从结果框中提取文本的方法。请检查所有方法并使用所需方法

  • 如果要提取所有文本,则可以找到结果框的元素,然后从中获取文本

    WebElement result=driver.findElement(By.id("mid"));
    System.out.println(result.getText());
    
  • 如果您想根据一节一节地提取文本,那么您可以使用以下方法

    List<WebElement> sectionList=driver.findElements(By.xpath("//div[@id='mid']/div"));
    int i=0;
    for(WebElement element:sectionList){
        System.out.println("Section "+i+":"+element.getText());
        i++;
    }
    
    输入方法:

        public void openTestSite() {
    
        //driver.navigate().to(the URL for the website);
        driver.get("https://wonef.fr/try/");
        driver.manage().window().maximize();
        //Explicit wait is added after the Page load
        WebDriverWait wait=new WebDriverWait(driver,20);
        wait.until(ExpectedConditions.titleContains("WoNeF"));
    }
    
    public void enter(String word) {
    
        WebElement query_editbox =
                driver.findElement(By.id("query"));
        query_editbox.sendKeys(word);
        //AutoComplete is happening even after sending the Enter Key.
        // So, Value needs to be selected from the autocomplete
        WebDriverWait wait=new WebDriverWait(driver,20);
        wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//div[@class='autocomplete']/div")));
        List<WebElement> matchedList=driver.findElements(By.xpath("//div[@class='autocomplete']/div"));
    
        System.out.println(matchedList.size());
        for(WebElement element : matchedList){
            if(element.getText().equalsIgnoreCase(word)){
                element.click();
            }
        }
        //query_editbox.sendKeys(Keys.RETURN);
    }
    

    我已经用上面修改过的代码进行了测试,它工作正常。

    你能检查一下图像吗?我们无法访问该图像。对此表示抱歉。你能看看我现在贴的图片吗?这是“在此处输入图像描述”链接。谢谢那么,你想让显示的3框中的所有内容都正确吗?是的,这是我的目标。好的。我已经更新了答案。请检查一下,非常感谢!!我会试试这个,希望它能起作用。谢谢!然而,我有一个小问题。System.out.println没有向我的控制台打印任何内容。我正在mac上使用eclipse。你知道为什么吗?哦。。。我使用的是Windows Eclipse,结果没有任何问题。您是否在控制台中得到了至少“方法1:”的结果?不,这也不起作用。但是,其他system.out语句正在工作。例如,在调用执行这些步骤并应该打印某些内容的方法后的main方法中,我打印了控制台窗口中出现的“hello”。所以,我有点困惑为什么这个方法不起作用。我怀疑这个方法可能没有被调用。你能把调用方法和其他sysout语句一起分享给我吗?你能参考我原来的帖子吗?我只是编辑了它,以包含到目前为止我所拥有的代码。