繁体   English   中英

如何使用Java修复Selenium Webdriver中的复选框?

[英]How can i fix my checkbox click in Selenium Webdriver with Java?

我正在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>

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

活动复选框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>

尝试操作:

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

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

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

WebElement checkBox = driver.findElement(By.xpath("//div[@class = 'ui-helper-hidden-accessible']/input[contains(@id, 'componentIndicators:1')]"));
checkBox.click();
  • 我建议您以这种方式使用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的更多信息, 请参考此链接

对于CSS路径, 请参考此链接

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

另一个问题是,所有复选框的属性可能相同。

这是解决方案,请参考下面给出的我给定的Custom Xpath链接:

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

在这里将计数设为1、2、3 ..,直到您的复选框中所有元素都不被您占用。现在您拥有了所有不同的元素。

我认为您无法以任何方式单击您的自定义复选框。 您可以尝试使用javascript动态添加活动状态类,看看是否可行。 这是如何做 -

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

上面的代码会将class设置为div。 现在,如果您还有更多带有id的div- componentIndicators:1:j_idt2989:sbc那么也可以使用数组索引。 这是如何做 -

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

希望能帮助到你。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM