Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在Selenium中未显示单选按钮时跳过检查_Java_Selenium_Radio Button - Fatal编程技术网

Java 在Selenium中未显示单选按钮时跳过检查

Java 在Selenium中未显示单选按钮时跳过检查,java,selenium,radio-button,Java,Selenium,Radio Button,我试图让SeleniumWebDriver检查是否显示了单选按钮,如果没有,则跳过该步骤继续。我有一个web应用的多个版本,一个较新版本实现了一个新的单选按钮,这在旧版本中不可用,但我想使用相同的selenium代码测试该应用的多个版本。我正在使用java代码来编写我的脚本,这就是我目前所拥有的 我有一个Utilities类,它包括几个其他函数,可在我的其他类AdminUtils.java中使用,我编写了以下代码来查找单选按钮元素,并在找到时单击它: public static void cli

我试图让SeleniumWebDriver检查是否显示了单选按钮,如果没有,则跳过该步骤继续。我有一个web应用的多个版本,一个较新版本实现了一个新的单选按钮,这在旧版本中不可用,但我想使用相同的selenium代码测试该应用的多个版本。我正在使用java代码来编写我的脚本,这就是我目前所拥有的

我有一个Utilities类,它包括几个其他函数,可在我的其他类AdminUtils.java中使用,我编写了以下代码来查找单选按钮元素,并在找到时单击它:

public static void clickPrivate() {

    WebElement rdBtn_Private = AdminUtils.driver.findElement(By.id("type-radio-private"));
    rdBtn_Private.click();
}
然后我有了我的基本测试类,我在其中调用函数(以及此步骤之前和之后的其他步骤):


这与较新版本的web应用程序相同,但会在较旧版本上引发错误,因为这些版本中不存在该按钮。我一直在阅读一些关于类似功能的建议,但我对Java和Selenium比较陌生,因此将其转换为我正在尝试的功能到目前为止都是无效的。我尝试了try-catch和.IsDisplayed调用,但我不确定哪个类需要它们,并且在尝试执行测试时,它在我的基本测试类的更深处导致了NullPointerException。如蒙协助,将不胜感激。提前谢谢

您可以使用一秒钟的短显式等待来检查元素是否存在。如果它确实单击它,如果它没有捕获异常并继续测试

WebDriverWait wait = new WebDriverWait(AdminUtils.driver, 1);
try {
    wait.until(ExpectedConditions.presenceOfElementLocated(By.id("type-radio-private"))).click();
}
catch (TimeoutException) { }

你需要一种新的方法,它只需检查单选按钮是否存在

public static boolean isPrivateRadioButtonExist() {
    return driver.findElements(By.id("type-radio-private")).size() != 0;
}
然后,在基本测试类中,调用此方法以确定是否需要跳过该步骤


然而,你处理问题的方式是不正确的。如果您有多个版本的web应用程序,那么您也应该有多个版本的自动测试。一种方法是遵循web应用程序的分支策略。这将避免您在代码中使用各种“if”语句。

谢谢您的输入。无论如何,我实现了代码,以防将来我们更改基本测试,包括取消选中单选按钮可见性所绑定的复选框。我将您的代码包括在我们的Utils类中,然后在基本测试中实现了以下内容。如果(ArchiveUtils.isPrivateRadioButtonExist()){ArchiveUtils.clickPrivate();}
public static boolean isPrivateRadioButtonExist() {
    return driver.findElements(By.id("type-radio-private")).size() != 0;
}