[英]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.