如果Selenium驱动程序未找到Element(If-else if)继续前进,但会引发找不到元素的错误

时间:2019-10-25 21:43:01

标签: java selenium chromium

长话短说-我有一个没有ID且具有复合类的按钮(因此,硒讨厌它/找不到它)。因此,我使用了XPath选择器,效果很好

multi_line()

但是按钮会根据所使用的语言而变化。

现在,我有

plot.multi_line(xs=[df['date'], df['date']], 
                ys=[df[df['country']=='Canada'], 
                    df[df['country']=='Canada']], 
                colors=['red', 'blue'])

但是当Selenium通过以下第一个if语句后出错时:

driver.findElement(By.xpath("//input[@value='Continue to Payment']")).click()

我知道该元素不存在..所以我不希望它做任何事情,并继续进行下一个if else语句。 我在这里想念什么?

2 个答案:

答案 0 :(得分:0)

try {
            if (driver.findElement(By.xpath("//input[@value='Continue to Payment']")).isDisplayed()){
                driver.findElement(By.xpath("//input[@value='Continue to Payment']")).click();
            }

            else if (driver.findElement(By.xpath("//input[@value='Paiement']")).isDisplayed()){
                driver.findElement(By.xpath("//input[@value='Paiement']")).click();
            }
            else
                System.out.println("Button not found");

        } catch(NoSuchElementException | StaleElementReferenceException e) {
            System.out.println("Impossible to click the pop-up. Reason: " + e.toString());
        }

尝试上述解决方案,希望它对您有用。在您的示例中,为else if (driver.findElement(By.xpath("//input[@value='Paiement']")).isDisplayed)编写了错误的代码。

答案 1 :(得分:0)

您可以使用单独的简短方法来获得预期的结果并记录错误。

public WebElement getElement(WebDriver driver, String XPATH, int timeoutInSeconds){
    WebElement elem = null;
    try{
        WebDriverWait wait = new WebDriverWait(webDriver, timeoutInSeconds);
        elem = wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath(XPATH));
    } catch (Exception e){
        // log or print error.
    }
    return elem;
}

然后您可以像这样称呼

WebElement e = getElement(driver, "//input[@value='Continue to Payment']", 10); 
if (e != null) {
    e.click();
} else {
  e = getElement(driver, "//input[@value='Paiement']", 5);
  if (e != null) {
    e.click();
  } /// and so on....
}

这样,您可以调整每个元素的等待时间,并且如果由于语言而缺少任何一个元素,也不会出错。