点击带有java selenium的第二个单选按钮

时间:2016-07-28 15:05:15

标签: java selenium xpath

我想用java / selenium点击第二个单选按钮。 Ids是动态的,我不知道为什么xpath不工作。 如果你们能告诉我它是如何工作的,那将是非常有帮助的。

HTML

import { bootstrap } from '@angular/platform-browser-dynamic';

现在代码

   <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>

4 个答案:

答案 0 :(得分:2)

单击带有标签&#34; Frau&#34;

的单选按钮
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();

答案 1 :(得分:2)

您可以使用radio button找到By.xpath,其标签文字如下: -

  • 要点击带有标签文字Frau

    的单选按钮
    driver.findElement(By.xpath("//input[../following-sibling::label[contains(.,'Frau')]]")).click();
    
  • 要点击带有标签文字Herr

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

已修改: - 如果您收到其他元素会收到点击的异常,则需要实施WebDriverWait等待DOM上的元素显示如下: - < / p>

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);

答案 2 :(得分:1)

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

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

答案 3 :(得分:0)

void init_shared_mem(void)
{
    int shmid;
    key_t key = 0x1235; //key to be passed to shmget()
    int oldSize = 27;
    int newSize = 28;
    char * shm;

    //check to see if an allocation exists
    if ((shmid = shmget(key, oldSize, IPC_CREAT | 0666)) < 0)
    {
        perror("shmget: shmget failed");
    }
    //unallocate it if it does
    else if (shmctl(shmid , IPC_RMID , 0) == -1)
    {
        perror("shmid");
    }


    //reallocate new section
    if ((shmid = shmget(key, newSize, IPC_CREAT | 0666)) < 0)
    {
        perror("shmget: shmget failed");
        exit(1);
    }

    if ((shm = shmat(shmid, NULL, 0)) == (char *) -1)
    {
        perror("shmat");
        exit(1);
    }
}