java - 如何使用 Selenium WebDriver 和 Java 选择单选按钮?

标签 java internet-explorer selenium selenium-webdriver

您好,我正在尝试使用 for 选择一个单选按钮,但我似乎无法选择一个单选按钮,如果你们可以通过选择上面的任何一个单选按钮来向我展示这是如何工作的有帮助,并向我展示如何使用这些单选按钮等进行操作。

非常感谢!

HTML:

<span class="radioButtonHolder">
<input type="radio" name="R001000" value="1" id="R001000.1" class="customCtrlLarge" />
</span>
<label for="R001000.1">Test 1</label>
</div>
<div class="Opt2 rbloption">
   <span class="radioButtonHolder">
   <input type="radio" name="R001000" value="2" id="R001000.2" class="customCtrlLarge" />
   </span>
   <label for="R001000.2">Test 2</label>
</div>

Java代码:

List<WebElement> RadioGroup1 = driver.findElements(By.name("R001000"));

     for (int i = 0; i < RadioGroup1.size(); i++) {
       System.out.println("NUM:" + i + "/" + RadioGroup1.get(i).isSelected());
}

RadioGroup1.get(1).click();

错误代码:

Started InternetExplorerDriver server (32-bit)
2.44.0.0
Listening on port 30883
NUM:0/false
NUM:1/false
NUM:2/false
Exception in thread "main" org.openqa.selenium.ElementNotVisibleException: Cannot click on element (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 91 milliseconds
Build info: version: '2.44.0', revision: '76d78cf', time: '2014-10-23 20:02:37'
System info: host: 'Code-PC', ip: 'Nope', os.name: 'Windows 7', os.arch: 'amd64', os.version: '6.1', java.version: '1.8.0_31'
Driver info: org.openqa.selenium.ie.InternetExplorerDriver
Capabilities [{browserAttachTimeout=0, enablePersistentHover=true, ie.forceCreateProcessApi=false, ie.usePerProcessProxy=false, ignoreZoomSetting=false, handlesAlerts=true, version=11, platform=WINDOWS, nativeEvents=true, ie.ensureCleanSession=false, elementScrollBehavior=0, ie.browserCommandLineSwitches=, requireWindowFocus=false, browserName=internet explorer, initialBrowserUrl=http://localhost:30883/, takesScreenshot=true, javascriptEnabled=true, ignoreProtectedModeSettings=false, enableElementCacheCleanup=true, cssSelectorsEnabled=true, unexpectedAlertBehaviour=dismiss}]
Session ID: cebed22f-5ae6-464b-bb1b-a18150f9e5a8
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:408)
    at org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:204)
    at org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:156)
    at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:599)
    at org.openqa.selenium.remote.RemoteWebElement.execute(RemoteWebElement.java:268)
    at org.openqa.selenium.remote.RemoteWebElement.click(RemoteWebElement.java:79)
    at javaapplication4.JavaApplication4.main(JavaApplication4.java:59)

最佳答案

我在这里使用了三个属性。 type 将确保它只返回 radio 按钮,name 将过滤更多内容以确保它仅找到具有匹配名称的元素,然后id 来唯一标识它。请注意,您可以将 cssSelector 用作 [id='R001000.1'] 。我只是向您展示不同的可能性。

第一个 radio 的 CssSelextor

[name='R001000'][id='R001000.1'][type='radio']

第二个 radio 的 CSSSelector

[name='R001000'][id='R001000.2'][type='radio']

实现:

By byCss = By.cssSelector("[name='R001000'][id='R001000.2'][type='radio']");
driver.findElement(byCss).click();

我不建议您在这种情况下使用for循环。问题是隐藏的同名单选按钮/元素的数量可能超过预期,因此列表将返回所有内容。

与 OP 讨论后,建议使用以下代码示例:

public void Test()
{
    _driver = new FirefoxDriver();
    _driver.Navigate().GoToUrl(Url);
    _driver.Manage().Window.Maximize();
    _driver.FindElement(By.Id("CN1")).SendKeys("7203002");
    _driver.FindElement(By.Id("CN2")).SendKeys("0370");
    _driver.FindElement(By.XPath("//*[@id='InputDay']/option[@value='23']")).Click();
    _driver.FindElement(By.XPath("//*[@id='InputMonth']/option[@value='02']")).Click();
    _driver.FindElement(By.XPath("//*[@id='InputYear']/option[@value='15']")).Click();
    _driver.FindElement(By.Id("NextButton")).Click();
    _driver.FindElement(By.XPath("//label[.='Lunch']//../span")).Click();
    _driver.FindElement(By.XPath("//label[.='Dining room']//../span")).Click();

}

关于java - 如何使用 Selenium WebDriver 和 Java 选择单选按钮?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28720098/

相关文章:

javascript - 防止 TinyMCE/Internet Explorer 将 URL 转换为链接

google-chrome - 私有(private)模式是否在流行的浏览器上启用 "Do Not Track"(DNT)?

java - 无法使用 selenium sendKeys 在文本字段中输入字符

java - Selenium 2.25.0 是否支持 Firefox 14?

java - 如何使用 split() 来分割一行

java - 类文件不运行

java - 有什么方法可以确定 Java 中的对象是否可软访问?

Java 空方法返回

html - IE中的多行按钮

java - 在 IE 中使用 Style 检查元素是否存在的语法是什么