Java 查找包含未知范围文本的webelement

Java 查找包含未知范围文本的webelement,java,html,selenium,xpath,Java,Html,Selenium,Xpath,我这里有这个html片段 这就是我想要实现的,在用户输入一个值后,使用输入值来检查哪个PagePostSSeConctionPaglet包含它,找到PagePostSSeConctionPaglet并找到同一PagePostSSeConctionPaglet中的类名(“\u 5sem”) get a list of text from webelement //compare a list of text in PagePostsSectionPaglet with unknown user

我这里有这个html片段

这就是我想要实现的,在用户输入一个值后,使用输入值来检查哪个PagePostSSeConctionPaglet包含它,找到PagePostSSeConctionPaglet并找到同一PagePostSSeConctionPaglet中的
类名(“\u 5sem”)

get a list of text from webelement

//compare a list of text in PagePostsSectionPaglet with unknown user input
if text in PagePostsSectionPaglet = input year 
{
    find PagePostsSectionPaglet that contains text that is same with input year
    go through same PagePostsSectionPaglet and find className="_5sem">  
    {
       find UFIPagerLink  //inside class="_5sem"
       find UFIPagerIcon  //inside class="_5sem"
    }
} 
问题如何查找由用户输入“文本”而不是特定值组成的WebElements PagePostSectionPaglet

尝试了不同的方法,但都有以下语法错误:该表达式不是合法表达式。

List <WebElement> PagePostsSectionPagelet = elm.findElements(By.xpath("//*[starts-with(@id, 'PagePostsSectionPagelet')]//contains('"+elm.getText()+"')"));

List <WebElement> PagePostsSectionPagelet = elm.findElements(By.xpath("//*[starts-with(@id, 'PagePostsSectionPagelet')]//span[elm.getText()]"));
List PagePostsSectionPagelet=elm.findElements(By.xpath(“//*[以(@id,'PagePostsSectionPagelet')开头]//包含(“+elm.getText()+”)”));
List pagePostSSeConctionPagelet=elm.findElements(By.xpath(“//*[以(@id,'PagePostSSeConctionPagelet')开头]///span[elm.getText()]”);
我的密码

    //tried to print the list of texts in AllPagePostsSectionPagelet but only returns the first value
    List <WebElement> AllPagePostsSectionPagelet= dr.findElements(By.xpath("//*[starts-with(@id, 'PagePostsSectionPagelet')]//span[@class='_5em9 lfloat _ohe _50f4 _50f7']"));

    for (WebElement elm : AllPagePostsSectionPagelet){  
        if(year.equals(elm.getText())){  //year is the user input value
            //get weblement that contains the text
            List <WebElement> PagePostsSectionPagelet = elm.findElements(By.xpath("//*[starts-with(@id, 'PagePostsSectionPagelet')]//elm.getText()")); //this is the issue
            System.out.println(PagePostsSectionPagelet); 
            for (WebElement elment : PagePostsSectionPagelet){
                List<WebElement> comments = elment.findElements(By.className("_5sem")); //find web element 

                //iterate through the comments 
                for (WebElement comment : comments) {

                       //find web elements by their respective class name
                       List<WebElement> commentsbutton = comment.findElements(By.className("UFIPagerLink"));
                       List<WebElement> repliesbutton = comment.findElements(By.className("UFIPagerIcon")); 
                }  
            }     
        //return;
        }
    }
//试图打印AllPagePostsSectionPagelet中的文本列表,但只返回第一个值
列出所有PagePostsSectionPagelet=dr.findElements(By.xpath(“//*[以(@id,'PagePostsSectionPagelet'))开头)]///span[@class=”''u5em9lfloat'uOHE'u50f4'u50f7']);
对于(WebElement elm:AllPagePostsSectionPagelet){
如果(year.equals(elm.getText()){//year是用户输入值
//获取包含文本的WebElement
List pagePostSSeConctionPagelet=elm.findElements(By.xpath(“//*[以(@id,'PagePostSSeConctionPagelet')]开头)///elm.getText()”;//这就是问题所在
System.out.println(PagePostSectionPagelet);
for(WebElement元素元素:PagePostSectionPagelet){
List comments=elment.findElements(By.className(“\u 5sem”);//查找web元素
//反复浏览评论
for(WebElement注释:注释){
//按其各自的类名查找web元素
List commentsbutton=comment.findElements(By.className(“UFIPagerLink”);
List repliesbutton=comment.findElements(By.className(“UFIPagerIcon”);
}  
}     
//返回;
}
}

这是我从您的问题中了解到的(如果我错了,请纠正我),您正在尝试搜索满足两个条件的特定
div
标记:

  • 有一个
    id=“PagePostsSectionPagelet”
  • 在该标记中,应该有一个与用户输入的值相匹配的
    span
    标记(例如:2014)
  • 现在,在该
    div
    标记中,您希望使用
    class=“\u 5sem”
    获取另一个
    div
    标记

    如果我解释的内容与您试图实现的内容相匹配,那么下面给出的xpath应该适用于您上面提供的HTML源代码

    "//span[text()='2014']/ancestor::div[contains(@id, 'PagePostsSectionPagelet')]//div[@class='_5sem']"
    
    您提供的Java代码可以简化为:

    //year is the user input value
    String xp = "//span[text()='" + year + "']/ancestor::div[contains(@id, 'PagePostsSectionPagelet')]//div[@class='_5sem']";
    
    WebElement comment = driver.findElement(By.xpath(xp)); 
    // Add code to fetch 'UFIPagerLink' and 'UFIPagerIcon'
    // which should be inside the div tag with class="_5sem"
    

    是的,你正确地理解了我的问题。但是,有一个NoSuchElementException:当我使用scanner输入2013年的用户输入时,无法定位元素:{“方法”:“xpath”,“选择器”:“//div[@id='PagePostsSectionPaglet'和span[text()='2013']]]/div[@id='''']”@Jasone即使我将您的代码更改为
    /div[@class='''u 5sem']
    ,它仍然有相同的NoTouchElementException错误@jason@dark_space-您可以共享HTML代码或链接吗?使用gist.github.com共享源代码。@dark_space-或者只发送
    的内容给我。这是html代码和链接