使用Java Selenium点击第二个单选按钮

4

我希望用Java/Selenium点击第二个单选按钮。

由于ID是动态的,而且我不知道为什么xpath无法工作。

如果你们能向我展示这个是如何工作的,那将非常有帮助。

HTML

   <div class="form-radiobutton-group group-horizontal" id="id29">
            <div class="form-radiobutton-element">
                <span class="form-radiobutton-wrapper">
                    <input class="salutation_f feedback-panel-trigger wicket-id29" id="id4" name="personaldataPanel:salutation:choices" value="radio9" type="radio">
                    <label for="id4" class=""></label>
                </span>
                <label for="id4">
                    Frau
                </label>
            </div>
            <div class="form-radiobutton-element">
                <span class="form-radiobutton-wrapper">
                    <input class="salutation_m feedback-panel-trigger wicket-id29" id="id3" name="personaldataPanel:salutation:choices" value="radio11" type="radio">
                    <label for="id3" class=""></label>
                </span>
                <label for="id3">
                    Herr
                </label>
            </div>
        </div>

立即编写代码

WebElement m = driver.findElement(By.xpath("//div[2]/span/input"));
m.click();
4个回答

2
点击标签为“Frau”的单选按钮:
WebElement m = driver.findElement(By.xpath(
    "//input[@id=//label[normalize-space(.)='Frau']/@for]"));

m.click();

或者:

WebElement m = driver.findElement(By.xpath(
    "id(//label[normalize-space(.)='Frau']/@for)"));

m.click();

2
您可以使用以下标签文本通过 By.xpath 定位 单选按钮
  • To click radio button with the label text Frau :

    driver.findElement(By.xpath("//input[../following-sibling::label[contains(.,'Frau')]]")).click();
    
  • To click radio button with the label text Herr :

    driver.findElement(By.xpath("//input[../following-sibling::label[contains(.,'Herr')]]")).click();
    

编辑:如果您遇到点击会被其他元素接收的异常,请按照以下步骤实现WebDriverWait,等待元素在DOM上可见:

WebDriverWait wait = new WebDriverWait(driver, 10);
el = wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//input[../following-sibling::label[contains(.,'Herr')]]")));
el.click();

如果您仍然遇到相同的问题,请尝试使用以下JavascriptExecutor进行单击:

((JavascriptExecutor)driver).executeScript("arguments[0].click()", el);

感谢您的回答,但我遇到了以下错误:Caused by: org.openqa.selenium.WebDriverException: Element is not clickable at point (358.5, 262). Other element would receive the click: <label for="id4" class=""></label> - Toffa
@Toffa 我认为你需要实现 WebDriverWait 来等待元素出现在 DOM 上.. :) - Saurabh Gaur
感谢上帝,更新成功了!没有你的帮助,我永远无法完成。 - Toffa
@Toffa 没问题,很高兴能帮到你。如果我的回答有帮助的话,请也接受一下答案...http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work... :) - Saurabh Gaur

1
driver.findElement(By.xpath("//*[text()='the label text']").click();

通过这种方式,您可以找到标签的名称,并通过此方法单击特定的单选按钮。

0
element=//input[@id=//label[normalize-space(.)='Frau']/@for]

public void javascriptclick(String element)
    { 
        WebElement webElement=driver.findElement(By.xpath(element));
        JavascriptExecutor js = (JavascriptExecutor) driver;

        js.executeScript("arguments[0].click();",webElement);   
        System.out.println("javascriptclick"+" "+ element);
        }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接