Java Selenium:当某些xpath没有元素时,如何编写if条件

Java Selenium:当某些xpath没有元素时,如何编写if条件,java,selenium,automation,Java,Selenium,Automation,以下是代码和问题: if(result.findElement(By.xpath(".//*[@class='s-item-container']/div[4]/span/a/i")).getText().equals("Lightning Deal")) 在亚马逊上搜索任何产品后,我们还可以在某些产品上看到“Lighting Deal”选项。现在,我试图检查照明交易选项是否存在。如果它存在,那么情况是真实的,一切都是好的。但如果没有照明协议,则会出现错误NoTouchElementExcep

以下是代码和问题:

if(result.findElement(By.xpath(".//*[@class='s-item-container']/div[4]/span/a/i")).getText().equals("Lightning Deal"))
在亚马逊上搜索任何产品后,我们还可以在某些产品上看到“Lighting Deal”选项。现在,我试图检查照明交易选项是否存在。如果它存在,那么情况是真实的,一切都是好的。但如果没有照明协议,则会出现错误
NoTouchElementException
,因为不存在
div[4]/span/a/i
。这个
div[4]/span/a/i
只有在有一些照明交易时才会生效

请建议我如何写这个如果条件

完整代码:

//All the products after searching in List
List<WebElement> resultsList = driver.findElements(By.xpath(".//*[starts-with(@id, 'result_')]"));

for(WebElement result:resultsList)
{
System.out.println("Name of the product:"+result.findElement(By.tagName("h2")).getText());

System.out.println("Brand: "+result.findElement(By.xpath(".//*[@class='s-item-container']/div[3]/div[2]/span[2]")).getText());

    if(result.findElement(By.xpath(".//*[@class='s-item-container']/div[4]/span/a/i")).getText().equals("Lightning Deal"))
    {
        String sp =result.findElement(By.xpath(".//*[@class='s-item-container']/div[5]/div[1]/a/span[2]")).getText();
        System.out.println("Selling Price: "+sp);       
    }

    else
    {
        System.out.println("Selling Price:"+result.findElement(By.xpath(".//*[@class='s-item-container']/div[4]/div[1]/a/span[2]")).getText());
    }
}
//在列表中搜索后的所有产品
List resultsList=driver.findelelements(By.xpath(“./*[以(@id,'result'')]”开头));
对于(WebElement结果:resultsList)
{
System.out.println(“产品名称:+result.findElement(By.tagName(“h2”)).getText());
System.out.println(“Brand:+result.findElement(By.xpath)(../*[@class='s-item-container']]/div[3]/div[2]/span[2]”);
if(result.findelelement(By.xpath(“./*[@class='s-item-container']/div[4]/span/a/i”).getText().equals(“闪电交易”))
{
字符串sp=result.findelelement(By.xpath(“./*[@class='s-item-container']/div[5]/div[1]/a/span[2]”);
System.out.println(“售价:+sp”);
}
其他的
{
System.out.println(“售价:+result.findElement(By.xpath(“./*[@class='s-item-container']]/div[4]/div[1]/a/span[2]”);
}
}

这就是你需要做的

List<WebElement> deals = result.findElements(By.xpath(".//*[@class='s-item-container']/div[4]/span/a/i"));
if(deals.size() > 0)
{
    if(deals.get(0).getText().equals("Lightning Deal"))
    {
        String sp =result.findElement(By.xpath(".//*[@class='s-item-container']/div[5]/div[1]/a/span[2]")).getText();
        System.out.println("Selling Price: "+sp);       
    }
    else
    {
        System.out.println("Selling Price:"+result.findElement(By.xpath(".//*[@class='s-item-container']/div[4]/div[1]/a/span[2]")).getText());
    }
}
List deals=result.findElements(By.xpath(“./*[@class='s-item-container']]/div[4]/span/a/i”);
如果(deals.size()>0)
{
if(deals.get(0.getText().equals(“闪电交易”))
{
字符串sp=result.findelelement(By.xpath(“./*[@class='s-item-container']/div[5]/div[1]/a/span[2]”);
System.out.println(“售价:+sp”);
}
其他的
{
System.out.println(“售价:+result.findElement(By.xpath(“./*[@class='s-item-container']]/div[4]/div[1]/a/span[2]”);
}
}

希望这有帮助这是你需要做的

List<WebElement> deals = result.findElements(By.xpath(".//*[@class='s-item-container']/div[4]/span/a/i"));
if(deals.size() > 0)
{
    if(deals.get(0).getText().equals("Lightning Deal"))
    {
        String sp =result.findElement(By.xpath(".//*[@class='s-item-container']/div[5]/div[1]/a/span[2]")).getText();
        System.out.println("Selling Price: "+sp);       
    }
    else
    {
        System.out.println("Selling Price:"+result.findElement(By.xpath(".//*[@class='s-item-container']/div[4]/div[1]/a/span[2]")).getText());
    }
}
List deals=result.findElements(By.xpath(“./*[@class='s-item-container']]/div[4]/span/a/i”);
如果(deals.size()>0)
{
if(deals.get(0.getText().equals(“闪电交易”))
{
字符串sp=result.findelelement(By.xpath(“./*[@class='s-item-container']/div[5]/div[1]/a/span[2]”);
System.out.println(“售价:+sp”);
}
其他的
{
System.out.println(“售价:+result.findElement(By.xpath(“./*[@class='s-item-container']]/div[4]/div[1]/a/span[2]”);
}
}

希望这有帮助

您可以在获取文本之前检查页面上是否存在元素

 for(WebElement result:resultsList)
 {
 System.out.println("Name of the 
 product:"+result.findElement(By.tagName("h2")).getText());

 System.out.println("Brand: "+result.findElement(By.xpath(".//*[@class='s-
 item-container']/div[3]/div[2]/span[2]")).getText());

if(result.findElements(By.xpath(".//*[@class='s-item-
container']/div[4]/span/a/i")).size() != 0
&& result.findElement(By.xpath(".//*[@class='s-item-
container']/div[4]/span/a/i")).getText().equals("Lightning Deal"))
{
  String sp =result.findElement(By.xpath(".//*[@class='s-item-
 container']/div[5]/div[1]/a/span[2]")).getText();
  System.out.println("Selling Price: "+sp);       
} 
else
{
    System.out.println("Selling Price:"+result.findElement(By.xpath(".//*
[@class='s-item-container']/div[4]/div[1]/a/span[2]")).getText());
} 
}

在获取文本之前,可以检查页面上是否存在元素

 for(WebElement result:resultsList)
 {
 System.out.println("Name of the 
 product:"+result.findElement(By.tagName("h2")).getText());

 System.out.println("Brand: "+result.findElement(By.xpath(".//*[@class='s-
 item-container']/div[3]/div[2]/span[2]")).getText());

if(result.findElements(By.xpath(".//*[@class='s-item-
container']/div[4]/span/a/i")).size() != 0
&& result.findElement(By.xpath(".//*[@class='s-item-
container']/div[4]/span/a/i")).getText().equals("Lightning Deal"))
{
  String sp =result.findElement(By.xpath(".//*[@class='s-item-
 container']/div[5]/div[1]/a/span[2]")).getText();
  System.out.println("Selling Price: "+sp);       
} 
else
{
    System.out.println("Selling Price:"+result.findElement(By.xpath(".//*
[@class='s-item-container']/div[4]/div[1]/a/span[2]")).getText());
} 
}

您需要将if语句括在Try-catch块中

try
块中包含
if
条件。因此,如果您的元素在那里,那么您将能够在
if
条件下执行操作

如果没有这样的xpath,那么它将抛出异常,该异常将在
catch
块下处理,所以只需在
catch
块下编写
else
部分即可

请参阅以下代码:

//All the products after searching in List
List<WebElement> resultsList = driver.findElements(By.xpath(".//*[starts-with(@id, 'result_')]"));

for(WebElement result:resultsList)
{
    System.out.println("Name of the product:"+result.findElement(By.tagName("h2")).getText());

    System.out.println("Brand: "+result.findElement(By.xpath(".//*[@class='s-item-container']/div[3]/div[2]/span[2]")).getText());

    try
    {
            if(result.findElement(By.xpath(".//*[@class='s-item-container']/div[4]/span/a/i")).getText().equals("Lightning Deal"))
            {
                String sp =result.findElement(By.xpath(".//*[@class='s-item-container']/div[5]/div[1]/a/span[2]")).getText();
                System.out.println("Selling Price: "+sp);       
            }
    }
    catch(Exception e)

    {
            System.out.println("Selling Price:"+result.findElement(By.xpath(".//*[@class='s-item-container']/div[4]/div[1]/a/span[2]")).getText());
    }
}
//在列表中搜索后的所有产品
List resultsList=driver.findelelements(By.xpath(“./*[以(@id,'result'')]”开头));
对于(WebElement结果:resultsList)
{
System.out.println(“产品名称:+result.findElement(By.tagName(“h2”)).getText());
System.out.println(“Brand:+result.findElement(By.xpath)(../*[@class='s-item-container']]/div[3]/div[2]/span[2]”);
尝试
{
if(result.findelelement(By.xpath(“./*[@class='s-item-container']/div[4]/span/a/i”).getText().equals(“闪电交易”))
{
字符串sp=result.findelelement(By.xpath(“./*[@class='s-item-container']/div[5]/div[1]/a/span[2]”);
System.out.println(“售价:+sp”);
}
}
捕获(例外e)
{
System.out.println(“售价:+result.findElement(By.xpath(“./*[@class='s-item-container']]/div[4]/div[1]/a/span[2]”);
}
}

您需要将if语句括在Try-catch块中

try
块中包含
if
条件。因此,如果您的元素在那里,那么您将能够在
if
条件下执行操作

如果没有这样的xpath,那么它将抛出异常,该异常将在
catch
块下处理,所以只需在
catch
块下编写
else
部分即可

请参阅以下代码:

//All the products after searching in List
List<WebElement> resultsList = driver.findElements(By.xpath(".//*[starts-with(@id, 'result_')]"));

for(WebElement result:resultsList)
{
    System.out.println("Name of the product:"+result.findElement(By.tagName("h2")).getText());

    System.out.println("Brand: "+result.findElement(By.xpath(".//*[@class='s-item-container']/div[3]/div[2]/span[2]")).getText());

    try
    {
            if(result.findElement(By.xpath(".//*[@class='s-item-container']/div[4]/span/a/i")).getText().equals("Lightning Deal"))
            {
                String sp =result.findElement(By.xpath(".//*[@class='s-item-container']/div[5]/div[1]/a/span[2]")).getText();
                System.out.println("Selling Price: "+sp);       
            }
    }
    catch(Exception e)

    {
            System.out.println("Selling Price:"+result.findElement(By.xpath(".//*[@class='s-item-container']/div[4]/div[1]/a/span[2]")).getText());
    }
}
//在列表中搜索后的所有产品
List resultsList=driver.findelelements(By.xpath(“./*[以(@id,'result'')]”开头));
对于(WebElement结果:resultsList)
{
System.out.println(“产品名称:+result.findElement(By.tagName(“h2”)).getText());
System.out.println(“Brand:+result.findElement(By.xpath)(../*[@class='s-item-container']]/div[3]/div[2]/span[2]”);
尝试
{
if(result.findelelement(By.xpath(“./*[@class='s-item-container']/div[4]/span/a/i”).getText().equals(“闪电交易”))
{
字符串sp=result.findelelement(By.xpath(“./*[@class='s-item-container']/div[5]/div[1]/a/span[2]”);
System.out.println(“售价:+sp”);
}
}
捕获(例外e)
{
System.out.println(“售价:+result.findElement(By.xpath(“./*[@class='s-item-container']]/div[4]/div[1]/a/span[2]”);
}
}

这是我最喜欢的黑客之一。基本上,问题在于检查元素是否在给定页面中可用findByElements方法现在开始运行。下面是代码

if(driver.findElements(ByXpath("XPATH_HERE")).size>0)
{
  //DO THE STUFF YOU NEED TO DO IF THE ELEMENT EXISTS
}
if块内的语句将仅在那里执行