繁体   English   中英

Selenium 中的单选按钮与 Java

[英]Radio Button in Selenium with Java

我想检查是否选择了单选按钮,但我无法在 selenium 和 Java 中找到用于单选按钮选择检查的 xpath。

我正在尝试使用此代码查看是否选中了“单向”复选框,然后浏览器应该 select 双向复选框。 但是每次我运行代码时,它只会看到“单向”复选框被选中,否则条件被调用。 这是我正在做的检查条件。

WebElement radioElement = driver.findElement(By.xpath("//div[@class='css-1dbjc4n']"));
        boolean selectState = radioElement.isSelected();
        System.out.println(selectState);
        if(selectState==true) {
            driver.findElement(By.xpath("(//div[@class='css-76zvg2 r-homxoj r-ubezar r-1ozqkpa'])[2]]")).click();
            System.out.println("If condition");
        } else {
            radioElement.click();
            System.out.println("Else condition");
        }

附加单选按钮的 HTML 代码。

<div class="css-1dbjc4n r-1d09ksm r-1inuy60 r-1qxgc49" style="padding-right: 0px; padding-left: 0px;">
<div class="css-1dbjc4n"></div>
<div class="css-1dbjc4n">
    <div class="css-1dbjc4n r-18u37iz r-1w6e6rj">
        <div class="css-1dbjc4n r-1awozwy r-1loqt21 r-18u37iz r-117bsoe r-1otgn73" data-focusable="true" tabindex="0" data-testid="one-way-radio-button" style="margin-right: 20px;">
            <div class="css-1dbjc4n r-zso239">
                <svg data-testid="svg-img" viewBox="0 0 18 18" width="18" height="18" fill="#000" color="#000" preserveAspectRatio="none">
                    <g fill="none" fill-rule="evenodd">
                        <circle cx="9" cy="9" r="8" fill="#FFF" stroke="#F7941D" stroke-width="2"></circle>
                        <circle cx="9" cy="9" r="4" fill="#EDB16A"></circle>
                    </g>
                </svg>
            </div>
            <div class="css-1dbjc4n">
                <div class="css-76zvg2 r-homxoj r-ubezar r-1ozqkpa" dir="auto" style="font-family: inherit;">one way</div>
            </div>
        </div>
        <div class="css-1dbjc4n r-1awozwy r-1loqt21 r-18u37iz r-117bsoe r-1otgn73" data-focusable="true" tabindex="0" data-testid="round-trip-radio-button" style="margin-right: 20px;">
            <div class="css-1dbjc4n r-zso239">
                <svg data-testid="svg-img" viewBox="0 0 18 18" width="18" height="18" fill="#000" color="#000" preserveAspectRatio="none">
                    <circle cx="9" cy="9" r="8" fill="#FFF" fill-rule="evenodd" stroke="#DDDDDD" stroke-width="2"></circle>
                </svg>
            </div>
            <div class="css-1dbjc4n">
                <div class="css-76zvg2 r-homxoj r-ubezar r-1ozqkpa" dir="auto" style="font-family: inherit;">round trip</div>
            </div>
        </div>
    </div>
</div>

最重要的是一个圆圈标签代表一个圆圈,而不是 svg 标签。 因此,看起来像选定单选按钮的 svg 标签包含两个圆形标签。

您可以测量 svg 标签中的圆形标签数量,并在此基础上将 svg 视为未选中。

代码:

    List<WebElement> svgTags = driver.findElements(By.tagName("svg"));
    for (WebElement svgTag: svgTags) {
        int circlesCount = svgTag.findElements(By.tagName("circle")).size();
        if (circlesCount == 1) {
            System.out.println("looks like unselected radiobutton");
        }
        else if (circlesCount > 1) {
            System.out.println("looks like selected radiobutton");
        }
        else {
            System.out.println("no circle in svg");
        }
    }

Output:

looks like selected radiobutton
looks like unselected radiobutton

如果有我可能会重复使用的代码(比如检查是否选择了单选按钮),我喜欢把它放在一个方法中,这样它就可以很容易地重用。 此方法获取单选按钮的父 DIV 并计算内部 SVG 圆圈的数量。 如果有多个,则选择单选按钮。 这样,您不仅可以将此方法用于“单向”单选按钮,还可以用于页面上的任何单选按钮。

public static boolean isSelected(By locator) {
    return new WebDriverWait(driver, Duration.ofSeconds(10)).until(ExpectedConditions.visibilityOfElementLocated(locator)).findElements(By.cssSelector("circle")).size() > 1;
}

简单的例子

By oneWayLocator = By.cssSelector("div[data-testid='one-way-radio-button']");
By roundTripLocator = By.cssSelector("div[data-testid='round-trip-radio-button']");
boolean oneWaySelected = isSelected(oneWayLocator);
boolean roundTripSelected = isSelected(roundTripLocator);

听起来您想检查是否选择了 One Way 单选按钮,如果是,则改为 select Round Trip。 要做到这一点,

By oneWayLocator = By.cssSelector("div[data-testid='one-way-radio-button']");
By roundTripLocator = By.cssSelector("div[data-testid='round-trip-radio-button']");

if (isSelected(oneWayLocator)) {
    driver.findElement(roundTripLocator).click();
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM