【问题标题】:How can i fix my checkbox click in Selenium Webdriver with Java?如何使用 Java 修复 Selenium Webdriver 中的复选框单击?
【发布时间】:2015-12-23 04:28:47
【问题描述】:

我在 Java 中使用 Selenium 来测试 webapp 中复选框的检查。这是我的代码:

WebElement checkBox1;
checkBox1 = driver.findElement((By.xpath(xpathOfElement)));
checkBox1.click();

Selenium Webdriver 找到复选框的位置,但由于某种原因它没有点击。只有复选框区域变为灰色,但复选框不会处于活动状态。

这是我的 HTML 的相关部分:

<div id="componentIndicators:1:j_idt2989:sbc" class="ui-chkbox ui-widget" style="position:relative; top:5px;">
  <div class="ui-helper-hidden-accessible">
    <input id="componentIndicators:1:j_idt2989:sbc_input" type="checkbox" onchange="PrimeFaces.ab({s:"componentIndicators:1:j_idt2989:sbc",e:"change",f:"newApplicationForm",p:"componentIndicators:1:j_idt2989:sbc",u:"componentIndicators:1:j_idt2989:wrapper",ps:true});" aria-checked="true" name="componentIndicators:1:j_idt2989:sbc_input">
  </div>
  <div class="ui-chkbox-box ui-widget ui-corner-all ui-state-default ui-state-active">
    <span class="ui-chkbox-icon ui-icon ui-c ui-icon-check"></span>
  </div>
</div>

如何在 Selenium WebDriver 中使用 Java 解决这个问题?将不胜感激。

活动复选框 HTML 如下所示:

<div class="ui-chkbox-box ui-widget ui-corner-all ui-state-default ui-state-active"> 
  <span class="ui-chkbox-icon ui-icon ui-icon-check ui-c"></span> 
</div> 

非活动复选框 HTML 如下所示

<div class="ui-chkbox-box ui-widget ui-corner-all ui-state-default"> 
  <span class="ui-chkbox-icon ui-icon ui-c ui-icon-blank"></span> 
</div>

【问题讨论】:

  • 你能分享那个元素的 xpath 吗?
  • 当然。 xpath1 = "/html/body/div[1]/div[2]/form/div[3]/div/div[2]/div/div[1]/div/div/div[2]/div/div/div/div/div/div/ul/li[2]/div/div/fieldset/div/div[1]/div[2]/span";
  • 我认为这不是写xpath的方法。因为当开发人员更改任何元素时,您肯定会得到 No such Element 异常。
  • 您可以手动选中和取消选中复选框并每次发布 html 吗?我认为复选框的“状态”将在 div 元素的属性中发生变化,让我们看看
  • 活动复选框&lt;div class="ui-chkbox-box ui-widget ui-corner-all ui-state-default ui-state-active"&gt; &lt;span class="ui-chkbox-icon ui-icon ui-icon-check ui-c"&gt;&lt;/span&gt; &lt;/div&gt; 非活动复选框&lt;div class="ui-chkbox-box ui-widget ui-corner-all ui-state-default"&gt; &lt;span class="ui-chkbox-icon ui-icon ui-c ui-icon-blank"&gt;&lt;/span&gt; &lt;/div&gt;

标签: java selenium checkbox


【解决方案1】:

尝试操作:

Actions builder = new Actions(driver);
builder.moveToElement(xpathOfElement).click().build().perform();

【讨论】:

  • 其他人可能会从解释为什么这段代码是一个解决方案中受益。
【解决方案2】:
  • 我建议你以这种方式使用 xpath,就像它永远不会给出这样的元素异常。重新生成或识别相同的 xpath 也不会让您感到困惑。

  • 如果可能,请始终使用 CSSPath。

  • 根据您的 HTML 代码,使用此 xpath 或 csspath。

CSS 路径:

".ui-chkbox-icon ui-icon ui-c ui-icon-blank"

 "span[class='ui-chkbox-icon ui-icon ui-c ui-icon-blank']"

XPATH:

//span[@class='ui-chkbox-icon ui-icon ui-c ui-icon-blank']

//span[contains(@class,'ui-chkbox-icon')]

现在你可以使用这个元素来点击了。

有关 xpath 的更多信息Please Refer This Link

对于 CSS 路径Please Refer This Link

================================================ ==============

还有一个问题是你可能对所有的复选框都有相同的属性。

这里是解决方案请参考我给出的链接,并将自定义 Xpath 设置为:

(//span[contains(@class,'ui-chkbox-icon')])[1]

这里给计数为 1、2、3 .. 直到你的复选框所有元素都没有被你选中。现在你有所有不同的元素。

【讨论】:

  • 我有五个具有相同属性的复选框,webdriver 可以根据 xpath 找到元素。我用一根树枝看了这个。 isChecked = driver .findElement( (By.xpath(xpath1))) .getAttribute("class");if (!isChecked.contains("ui-state-active")) {...}
  • InvalidSelectorError: Unable to locate an element with the xpath expression //span[contains(@class,'ui-chkbox-icon')])[1] 因为以下错误:SyntaxError: The表达式不是合法表达式。
  • 你错过了(在开始
【解决方案3】:

我认为你不能以任何方式点击你的这个自定义复选框。您可以尝试使用 javascript 动态添加活动状态类并查看它是否有效。方法如下-

driver.executeScript("document.getElementById('componentIndicators:1:j_idt2989:sbc').getElementsByTagName('div')[1].className += 'ui-state-active';");

上面的代码会将类活动设置为 div。现在,如果您有更多带有 id - componentIndicators:1:j_idt2989:sbc 的 div,那么也可以使用数组索引。方法如下-

driver.executeScript("document.getElementsById('componentIndicators:1:j_idt2989:sbc')[0].getElementsByTagName('div')[1].className += 'ui-state-active';");
//Replace index 0 with your element's index value. Note, its a zero based index

希望对你有帮助。

【讨论】:

  • 我也遇到了同样的现象,复选框区域变灰,但是复选框不会被激活
【解决方案4】:

从您提供的源代码中,您可以直接搜索输入元素。

由于所有相关的输入元素都具有相同的 id,因此您需要在 xpath 查询末尾使用“[2]”请求“2nd”:

WebElement checkBox = driver.findElement(By.xpath("//div[@class = 'ui-helper-hidden-accessible']/input[contains(@id, 'componentIndicators:1')]"));
checkBox.click();

【讨论】:

  • 我有五个具有相同属性的复选框,并且 webdriver 可以找到该元素。
  • link,我想找到并点击第二个复选框。
  • 无法定位元素:{"method":"xpath","selector":"//input[contains(@id, 'componentIndicators:1')][2]"}跨度>
  • @Milky,抱歉忘记了括号,编辑答案再试一次!
  • 无法定位元素:{"method":"xpath","selector":"(//input[contains(@id, 'componentIndicators:1')])[2]"}
【解决方案5】:

我解决了我的问题,谢谢大家的帮助。

Thread.sleep(1000);
WebElement element = driver.findElement((By.xpath(xpathOfElement)));
JavascriptExecutor executor = (JavascriptExecutor)driver;
executor.executeScript("arguments[0].click();", element);
Thread.sleep(1000);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-04-24
    • 1970-01-01
    • 1970-01-01
    • 2017-03-31
    • 1970-01-01
    • 2018-11-14
    • 1970-01-01
    相关资源
    最近更新 更多