长话短说-我有一个没有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语句。 我在这里想念什么?
答案 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....
}
这样,您可以调整每个元素的等待时间,并且如果由于语言而缺少任何一个元素,也不会出错。