我有一个点击单选按钮的代码,起初我使用的是Chrome。使用以下代码:
driver.findElement(By.id("radioButton1"))).click();
我收到了错误:
"org.openqa.selenium.WebDriverException: Element is not clickable at point (411, 675). Other element would receive the click: ..."
做研究,我将代码更改为:
actions.moveToElement(driver.findElement(By.id("radioButton1"))).click().perform();
现在,我正在尝试使用Internet Explorer驱动程序。但它不会执行点击。
我尝试了以下内容:
driver.findElement(By.id("radioButton1")).sendKeys(Keys.ENTER);
actions.moveToElement(driver.findElement(By.id("radioButton1"))).click().perform();
((JavascriptExecutor) driver).executeScript("arguments[0].click()", driver.findElement(By.id("radioButton1")));
但没有效果。第一个只关注按钮,所以我添加了另一个sendKeys,但它不起作用。第二和第三,没有任何反应。
编辑:
添加HTML代码段。
<input name="btn1" class="w-rdo-native" id="radioButton1" type="radio" value="value1" bh="RDOINP" isrefresh="false">
<label class="w-rdo w-rdo-dsize" bh="RDO"></label>
当我点击单选按钮时,标签会在点击后获得额外的属性。
<label class="w-rdo w-rdo-dsize" bh="RDO" AWMouseDown="true"></label>
其他编辑:
按钮组如下所示:
并且如前所述,一个按钮+标签块具有以下HTML结构:
<tr>
<td>
<div class="w-rdo-container">
<input name="radioButtons" class="w-rdo-native" id="button1" type="radio" value="button1" bh="RDOINP" isrefresh="false">
<label class="w-rdo w-rdo-dsize" bh="RDO">
</label>
</div>
</td>
<td class="sectionHead">Option 2
</td>
</tr>
单击按钮后,相应的标签会获得其他属性:
<label class="w-rdo w-rdo-dsize" bh="RDO" AWMouseDown="true"></label>
似乎AWMouseDown似乎是“正式”点击按钮的触发器。
编辑:
表格的完整HTML代码段。 (请注意,如果我提交了一个表,那么这张表已经被清理了,所以对于某些错误道歉。)
<table border="0" cellpadding="0" cellspacing="0" class="a-cptp-tbl">
<tbody>
<tr>
<td>
<div class="w-rdo-container">
<input checked class="w-rdo-native" id="btn1" name="radioBtn" type="radio" value="btn1"><label class="w-rdo w-rdo-dsize"></label>
</div>
</td>
<td class="sectionHead">Option 1</td>
</tr>
<tr>
<td></td>
</tr>
<tr>
<td>
<div class="w-rdo-container">
<input class="w-rdo-native" id="btn2" name="radioBtn" type="radio" value="btn2"><label class="w-rdo w-rdo-dsize"></label>
</div>
</td>
<td class="sectionHead">Option 2</td>
</tr>
<tr>
<td></td>
</tr>
<tr>
<td>
<div class="w-rdo-container">
<input class="w-rdo-native" id="btn3" name="radioBtn" type="radio" value="btn3"><label class="w-rdo w-rdo-dsize"></label>
</div>
</td>
<td class="sectionHead">Option 3</td>
</tr>
<tr>
<td></td>
</tr>
<tr>
<td>
<div class="w-rdo-container">
<input class="w-rdo-native" id="btn4" name="radioBtn" type="radio" value="btn4"><label class="w-rdo w-rdo-dsize"></label>
</div>
</td>
<td class="sectionHead">Option 4</td>
</tr>
<tr>
<td></td>
</tr>
<tr>
<td>
<div class="w-rdo-container">
<input class="w-rdo-native" id="btn5" name="radioBtn" type="radio" value="btn5"><label class="w-rdo w-rdo-dsize"></label>
</div>
</td>
<td class="sectionHead">Option 5</td>
</tr>
<tr>
<td></td>
</tr>
<tr>
<td>
<div class="w-rdo-container">
<input class="w-rdo-native" id="btn6" name="radioBtn" type="radio" value="btn6"><label class="w-rdo w-rdo-dsize"></label>
</div>
</td>
<td class="sectionHead">Option 6</td>
</tr>
<tr>
<td></td>
</tr>
</tbody>
</table>
答案 0 :(得分:2)
尝试使用如下的JavaScript:
WebElement radioBtn1 = driver.findElement(By.id("radioButton1"));
((JavascriptExecutor) driver).executeScript("arguments[0].checked = true;", radioBtn1);
如果您使用的是QMetry Automation Framework,则应创建自定义单选按钮组件,例如您可以使用此类自定义实现覆盖click方法。
答案 1 :(得分:1)
使用ExplicitWait
等待元素直到可点击,然后必须点击该元素
WebElement element = driver.findElement(By.id("radioButton1"));
WebDriverWait wait = new WebDriverWait(driver, 120);
wait.until(ExpectedConditions.elementToBeClickable(element));
element.click();
<强> EDITED 强>
如果它导致IE
浏览器出现问题。原因是阻止在IE浏览器中查找元素为ActiveX Controls
所以,您需要按照以下步骤进行操作 -
答案 2 :(得分:0)
您可以尝试使用列表识别单选按钮,然后使用带有get()的索引单击列表中的元素吗?
List<WebElement> radioGrp = driver.findElements(By.name("xxxxxxxx"));
radioGrp.get(0).click();
答案 3 :(得分:0)
不确定导致问题的原因。这对我来说很有用:
public static IWebDriver driver;
[Test]
public void TestMethod1()
{
driver = new PhantomJSDriver();
driver.Navigate().GoToUrl("file:///C:/Users/utripra/Desktop/test.html");
driver.FindElement(By.Id("radioButton1")).Click();
答案 4 :(得分:0)
似乎单选按钮是<input>
和<label>
标记的组合,即<div>
与class="w-rdo-container"
或其<td>
父级。我是这么认为的,因为说唱歌手<td>
和标签<td>
所在的Option 2
是兄弟姐妹。
class="w-rdo-container"
似乎不是唯一的,因此您可以使用xpath
从id="button1"
上升html树
driver.findElement(By.xpath("//div[input[@id='button1']]")).click(); // to click the div
// or
driver.findElement(By.xpath("//td[div[input[@id='button1']]]")).click(); // to click the td
答案 5 :(得分:0)
点击选项2 单选按钮,尝试以下操作:
driver.findElement(By.xpath("//td[normalize-space(text())='Option 2']/preceding::input[1]")).click();
答案 6 :(得分:0)
编写一个接受单选按钮位置的方法,然后使用cssSelector单击按钮,如下所示:
driver.findElement(By.cssSelector("table.a-cptp-tbl > tbody > tr:nth-child(" + checkBoxPosition + ") > td > div > input")).click();
完整方法:
public void selectOption(int positionOfCheckBox){
By locator = By.cssSelector("table.a-cptp-tbl > tbody > tr:nth-child(" + positionOfCheckBox + ") > td > div > input");
//wait for your element to be visible
WebDriverWait wait = new WebDriverWait(driver, 30);
wait.until(ExpectedConditions.visibilityOfElementLocated(locator));
//click element after it is visible/clickable
driver.findElement(locator).click();
}
答案 7 :(得分:-1)
只需在脚本上方添加Thread.sleep(5000);
单选按钮即可。
例如像这样
Thread.sleep(5000);
driver.findElement(By.id("uniform-id_gender2")).click();
它对我有用。 :)