硒网络驱动程序: 单击单选按钮不起作用

2022-09-04 21:50:39

我有一个点击单选按钮的代码,起初我使用的是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,但它不起作用。第2和第3,没有任何反应。

编辑:

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

其他编辑:

按钮集如下所示:

enter image description here

如前所述,一个按钮 + 标签块具有以下 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>

答案 1

尝试使用 JavaScript,如下所示:

WebElement radioBtn1 = driver.findElement(By.id("radioButton1"));
((JavascriptExecutor) driver).executeScript("arguments[0].checked = true;", radioBtn1);

如果使用的是 QMetry 自动化框架,则应创建自定义单选按钮组件,例如可以使用此类自定义实现重写 click 方法的位置。


答案 2

用于等待元素直到可单击,然后必须单击该元素ExplicitWait

     WebElement element = driver.findElement(By.id("radioButton1"));
     WebDriverWait wait = new WebDriverWait(driver, 120);
     wait.until(ExpectedConditions.elementToBeClickable(element));

     element.click();

编辑

如果它导致浏览器出现问题。原因是阻止在IE浏览器中查找元素是IEActiveX Controls

因此,只需按照以下步骤操作 -

  1. 转到互联网选项>高级>安全性,并检查下面提到的检查 -enter image description here

  2. 检查后>应用,然后不要忘记重新启动PC

现在,只需运行脚本并尝试使用id

driver.findElement(By.id("button1")).click(); 

希望这将起作用。如果仍然面临同样的问题,请告诉我们。


推荐