否则使用xpath(Java)无法识别

时间:2017-08-17 14:10:57

标签: java xpath selenium-webdriver

在if-else语句中,程序显示错误

no such element: Unable to locate element: {"method":"xpath","selector":"//a[contains(.,'Frizerul')]/ancestor::div[contains(@class, 'js-answer-element')]//div[@class='sg-actions list__hole']//li[2]//span[contains(.,'raportată ca abuz')]"}

并且不执行else(在这种情况下在控制台中显示消息)

方法是:

public void reported(String username){
    if(driver.findElement(By.xpath("//a[contains(.,'"+username+"')]/ancestor::div[contains(@class, 'js-answer-element')]//div[@class='sg-actions-list__hole']//li[2]//span[contains(.,'raportată ca abuz')]")).isDisplayed()==true)
    {
        System.out.println ("Tema raportata " + driver.getCurrentUrl()); 
    }
    else{
        System.out.println ("Tema nneraportata"+driver.getCurrentUrl());
    }
}

任何人都可以解释我的错误吗?

3 个答案:

答案 0 :(得分:0)

我认为在执行代码时该元素不可用。

这是否是延迟加载的内容?你确定它的元素是html吗?你使用浏览器工具编写xpath吗?

Chrome / Firefox提供了很好的工具来帮助您编写Xpath代码。

答案 1 :(得分:0)

我发现和工作的解决方案是将其他内容放入其他内容中。该方法如下所示:

public void reported(String username){

if(driver.findElement(By.xpath("//a[contains(.,'"+username+"')]/ancestor::div[contains(@class, 'js-answer-element')]//div[@class='sg-actions-list__hole']//li[2]")).getText().contains("raportată ca abuz"))
{
    System.out.println ("Tema raportata " + driver.getCurrentUrl()); 
} 
else{
    if(driver.findElement(By.xpath("//a[contains(.,'"+username+"')]/ancestor::div[contains(@class, 'js-answer-element')]//div[@class='sg-actions-list__hole']//li[2]")).getText().contains("Raportează abuzul!"))
    {
        System.out.println ("Tema neraportata " + driver.getCurrentUrl());
    }
    }

}

答案 2 :(得分:0)

试试这个:

public void reported(String username){
    String elementXpath = "//a[contains(.,'"+username+"')]/ancestor::div[contains(@class, 'js-answer-element')]//div[@class='sg-actions-list__hole']//li[2]//span[contains(.,'raportată ca abuz')]";

    WebElement ele = driver.findElement(By.xpath(elementXpath));        

    if(null == ele || ele.isDisplayed()==false)
    {
        System.out.println ("Tema nneraportata"+driver.getCurrentUrl());
    }
    else{
        System.out.println ("Tema raportata " + driver.getCurrentUrl()); 

    }
}