检查元素在Selenium Java中是否可单击
我是检查元素在Selenium Java中是否可单击,java,selenium,selenium-webdriver,automation,Java,Selenium,Selenium Webdriver,Automation,我是Selenium新手,需要检查元素是否可以在SeleniumJava中单击,因为元素。click()会传递链接和标签 我尝试使用以下代码,但不起作用: WebDriverWait wait = new WebDriverWait(Scenario1Test.driver, 10); if(wait.until(ExpectedConditions.elementToBeClickable(By.xpath("(//div[@id='brandSlider']/div[1]/div/div/
Selenium
新手,需要检查元素是否可以在Selenium
Java
中单击,因为元素。click()
会传递链接和标签
我尝试使用以下代码,但不起作用:
WebDriverWait wait = new WebDriverWait(Scenario1Test.driver, 10);
if(wait.until(ExpectedConditions.elementToBeClickable(By.xpath("(//div[@id='brandSlider']/div[1]/div/div/div/img)[50]")))==null)
等待。直到(ExpectedConditions)
不返回null,它将满足条件或抛出TimeoutException
您可以检查元素是否已显示和启用
WebElement element = driver.findElement(By.xpath);
if (element.isDisplayed() && element.isEnabled()) {
element.click();
}
用于检查元素是否可见并已启用,以便您可以单击它
ExpectedConditions.elementtobelickable
如果预期条件为true,则返回,否则将抛出,它永远不会返回null
因此,如果您使用ExpectedConditions.ElementToBickable
查找一个元素,该元素将始终为您提供可单击的元素,因此无需检查null
条件,您应尝试以下操作:-
WebDriverWait wait = new WebDriverWait(Scenario1Test.driver, 10);
WebElement element = wait.until(ExpectedConditions.elementToBeClickable(By.xpath("(//div[@id='brandSlider']/div[1]/div/div/div/img)[50]")));
element.click();
正如您所说的element.click()
在链接和标签上传递,这并不意味着元素不可单击,它意味着返回的元素已单击
,但单击操作可能不会对元素执行任何事件
注意:-我建议您始终首先尝试通过id
、name
、className
和其他定位器查找元素。如果您遇到查找困难,请使用cssSelector
,并始终将最后一个优先级放在xpath
定位器上,因为它比其他定位器查找元素的速度慢
希望它能帮助您:)从源代码中,您可以看到,ExpectedConditions.ElementToBelickable()
,它将判断元素是否可见和启用,因此您可以将isEnabled()
与isDisplayed()
一起使用。下面是源代码
公共静态ExpectedCondition元素可选择(最终WebElement){
返回新的ExpectedCondition(){
公共WebElement应用(WebDriver){
WebElement visibleElement=(WebElement)ExpectedConditions.visibilityOf(element).apply(驱动程序);
试一试{
return visibleElement!=null&&visibleElement.isEnabled()?visibleElement:null;
}捕获(StaleElementReferenceException arg3){
返回null;
}
}
公共字符串toString(){
返回“可点击元素:”+元素;
}
};
}
当element.isDisplayed()&&element.isEnabled()
将返回true
,但元素仍将不可单击,因为它被其他元素隐藏/重叠
在这种情况下,捕获到的异常是:
org.openqa.selenium.WebDriverException:未知错误:元素不存在
可点击点(781704)。其他元素将收到单击:
…
请改用此代码:
WebElement element=driver.findElement(By.xpath"");
JavascriptExecutor ex=(JavascriptExecutor)driver;
ex.executeScript("arguments[0].click()", element);
它将起作用。List wb=driver.findElements(By.xpath(newXpath));
List<WebElement> wb=driver.findElements(By.xpath(newXpath));
for(WebElement we: wb){
if(we.isDisplayed() && we.isEnabled())
{
we.click();
break;
}
}
}
for(WebElement we:wb){
if(we.isDisplayed()&&we.isEnabled())
{
we.click();
打破
}
}
}
有些事情你必须小心:
- inconjunction with as在定位并可单击后返回,即可见和启用
- 在此过程中,将忽略默认情况下在
直到
条件下遇到的NotFoundException
实例
- 一旦所需元素的等待时间到期且无法定位和单击,将引发超时异常
- 解决这一问题的不同方法是:
- 要在返回元素后立即调用
click()
,可以使用:
new WebDriverWait(driver, 10).until(ExpectedConditions.elementToBeClickable(By.xpath("(//div[@id='brandSlider']/div[1]/div/div/div/img)[50]"))).click();
- 要简单地验证元素是否位于并可单击,请将WebDriverWait包装在
try catch{}
块中,如下所示:
try {
new WebDriverWait(driver, 10).until(ExpectedConditions.elementToBeClickable(By.xpath("(//div[@id='brandSlider']/div[1]/div/div/div/img)[50]")));
System.out.println("Element is clickable");
}
catch(TimeoutException e) {
System.out.println("Element isn't clickable");
}
WebElement element = new WebDriverWait(driver, 10).until(ExpectedConditions.elementToBeClickable(By.xpath("(//div[@id='brandSlider']/div[1]/div/div/div/img)[50]")));
((JavascriptExecutor)driver).executeScript("arguments[0].click();", element);
- 如果WebDriverWait返回已定位且可单击的元素,但该元素仍然不可单击,则需要调用
executeScript()
方法,如下所示:
try {
new WebDriverWait(driver, 10).until(ExpectedConditions.elementToBeClickable(By.xpath("(//div[@id='brandSlider']/div[1]/div/div/div/img)[50]")));
System.out.println("Element is clickable");
}
catch(TimeoutException e) {
System.out.println("Element isn't clickable");
}
WebElement element = new WebDriverWait(driver, 10).until(ExpectedConditions.elementToBeClickable(By.xpath("(//div[@id='brandSlider']/div[1]/div/div/div/img)[50]")));
((JavascriptExecutor)driver).executeScript("arguments[0].click();", element);
当元素不可单击时,class属性包含禁用的
WebElement-WebElement=driver.findElement(By.id(“elementId”));
如果(!webElement.getAttribute(“类”)包含(“禁用”)){
webElement.click();
}
有一个名为“cursor”的CSS属性,用于确定鼠标指针位于元素上方时要显示的鼠标光标类型
它是用来使元素可点击的,因此它可以用来检查元素是否可点击。那么我应该使用侦听器吗?检查屏幕上的任何事件label@SandeepKrishnappa不需要,您应该尝试使用javascript在label的浏览器控制台上执行click first,并验证它是否接收到任何click事件……如果接收到,那么它肯定会通过selenium进行单击。@SaurabhGaur-我有一个类似的问题。我想知道你是否能帮我回答这个问题?非常感谢。有些情况下,element.isDisplayed()&&element.isEnabled()
将返回true
,但元素仍然不可单击,因为元素被其他元素隐藏/重叠。在这种情况下,捕获的异常是:org.openqa.selenium.WebDriverException:未知错误:元素在点(781704)处不可单击。其他元素将收到点击:…
这完全正确,大多数人都不知道这一事实@拉贾戈帕兰:没错,您的元素应该在UI中可见,并且不应该有任何覆盖。@cruisepandey visible和enable不足以知道元素是否可单击,这就是为什么ElementToBelickable在我们讨论的上一个问题中失败的原因,在这里,这个用户在他的答案中解释了相同的内容。@cruisepandey更清楚地阅读了他的答案,他解释了element.isDisplayed()&&element.isEn