2016-07-28 125 views
4

我想用java/selenium單擊第二個單選按鈕。 ID是動態的,我不知道爲什麼xpath不工作。 如果你們能告訴我它是如何工作的話,這將會非常有幫助。用java selenium單擊第二個單選按鈕

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

回答

2

您可以按照下面使用By.xpath與他們的標籤文本查找radio button: -

  • 要點擊與標籤文本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如下可見: -

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

感謝的答案,但我得到這個錯誤產生的原因:org.openqa.selenium.WebDrive rException:元素在點(358.5,262)處不可點擊。其他元素會收到點擊: Toffa

+0

@Toffa我認爲你需要實現'WebDriverWait'來等待直到元素出現在dom上.. :) –

+0

@Toffa嘗試更新回答,希望它有幫助.. :) –

2

要點擊帶有標籤 「弗勞」 單選按鈕:

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(); 
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); 
     } 
相關問題