【问题标题】:Click Radio Button Selenium单击单选按钮硒
【发布时间】:2018-11-02 16:28:42
【问题描述】:

一直试图点击网站上的单选按钮无济于事。

<df-radio-group class="o-flex o-flex--distribute df-question ng-tns-c33-15 ng-has-value ng-touched ng-dirty ng-valid" aria-label="Title" id="title" aria-labelledby="title" role="radiogroup" style="float: left; width: 100%;">
			<!----><df-radio _nghost-c40="" class="ng-tns-c33-15 is-checked" id="md-radio-93fd918"><label _ngcontent-c40="" class="df-radio-label" for="md-radio-93fd918-input">
  <input _ngcontent-c40="" class="df-radio-input visually-hidden" type="radio" id="md-radio-93fd918-input" name="df-radio-group-0">
  <div _ngcontent-c40="" class="md-radio-label-content">
    
				Mr
			
  </div>
</label></df-radio><df-radio _nghost-c40="" class="ng-tns-c33-15" id="md-radio-bd05b81"><label _ngcontent-c40="" class="df-radio-label" for="md-radio-bd05b81-input">
  <input _ngcontent-c40="" class="df-radio-input visually-hidden" type="radio" id="md-radio-bd05b81-input" name="df-radio-group-0">
  <div _ngcontent-c40="" class="md-radio-label-content">
    
				Mrs
			
  </div>
</label></df-radio><df-radio _nghost-c40="" class="ng-tns-c33-15" id="md-radio-ba9f195"><label _ngcontent-c40="" class="df-radio-label" for="md-radio-ba9f195-input">
  <input _ngcontent-c40="" class="df-radio-input visually-hidden" type="radio" id="md-radio-ba9f195-input" name="df-radio-group-0">
  <div _ngcontent-c40="" class="md-radio-label-content">
    
				Miss
			
  </div>
</label></df-radio><df-radio _nghost-c40="" class="ng-tns-c33-15" id="md-radio-ec973a5"><label _ngcontent-c40="" class="df-radio-label" for="md-radio-ec973a5-input">
  <input _ngcontent-c40="" class="df-radio-input visually-hidden" type="radio" id="md-radio-ec973a5-input" name="df-radio-group-0">
  <div _ngcontent-c40="" class="md-radio-label-content">
    
				Ms
			
  </div>
</label></df-radio>
		</df-radio-group>

一直试图同时单击单选按钮和标签,但 selenium 不断抛出 no such element 错误,我在这个阶段有点沮丧。

在实际网站上可能更容易看到:

https://www.theaa.ie/car-insurance/journey/getting-started

输入电子邮件后在页面上。试图让一些测试用例运行,但不想点击这些单选按钮。

【问题讨论】:

  • 你能分享你试过的代码吗?
  • 我尝试了几种不同的方法。这是最新的。 private final RadioButton Mr = new RadioButton(By.cssSelector("#md-radio-93fd918 > label"));
  • 你可以试试 XPath 吗?请检查以下 xpath 是否正常工作 WebElement mrElement=driver.findElement(By.xpath("//label[@class='df-radio-label']/input")); if(mrElement.isDisplayed()){ mrElement.click(); }

标签: java selenium selenium-webdriver


【解决方案1】:

在这种情况下,我会使用 XPath 按其内容单击元素。您在这里遇到的一个问题是这些包含标题的DIVs 充满了空格(见下文)。

<div _ngcontent-c40="" class="md-radio-label-content">

            Mr

</div>

因此,我们不能做一些简单的事情

//div[.='Mr']

另一个问题是您不能使用contains(),因为MrMrs 都包含字符串Mr。我们可以通过使用修剪空白的normalize-space() 来避免整个事情。

//div[normalize-space(.)='Mr']

如果是我,我会把它包装在一个函数中,因为你可能会重复使用它。

public void selectTitle(String title)
{
    driver.findElement(By.xpath("//div[normalize-space(.)='" + title + "']")).click();
}

然后这样称呼它

selectTitle("Miss");

【讨论】:

    【解决方案2】:

    看一下html结构:

    您可以等待 ID 为 "title" 的 Web 元素出现,然后找到所有类名为 "md-radio-label-content" 的元素。

    一旦你拥有了所有这些,你可以检查文本并点击感兴趣的。

    所以,例如,如果你想点击“先生”:

    WebElement titleRadiogroup = (new WebDriverWait(driver, 10))
                    .until(ExpectedConditions.presenceOfElementLocated(By.id("title")));
    
    
            List<WebElement> ele= titleRadiogroup.findElements(By.className("md-radio-label-content"));
    
            for (WebElement el : ele)
            {
                if(el.getText().equalsIgnoreCase("Mr"))
                {
                    el.click();
                }
            }
    

    【讨论】:

    • 这行不通,因为.getText() 会在一堆空白中间返回Mr,所以它永远不会完全是.equals()“先生”。
    猜你喜欢
    • 2021-08-12
    • 2021-12-08
    • 2020-04-15
    • 1970-01-01
    • 1970-01-01
    • 2023-01-11
    • 1970-01-01
    • 2020-12-05
    • 2016-05-29
    相关资源
    最近更新 更多