检查Selenium Java中是否可以单击元素

时间:2016-07-12 11:03:56

标签: java selenium selenium-webdriver automation

我是const的新手,需要检查Selenium Selenium中的元素是否可点击,因为Java同时传递element.click()和{{} 1}}。

我尝试使用以下代码但不能正常工作:

link

需要帮助。

10 个答案:

答案 0 :(得分:10)

elementToBeClickable用于检查元素是否可见并启用,以便您可以单击它。

$sql = 'SELECT * FROM list WHERE d_n =?'; $stmt =$con->prepare($sql); $stmt->bind_param('s', $_POST['d_n']); $stmt->execute(); $numrows = $stmt->num_rows; 如果预期条件为真,则返回WebElement,否则会抛出TimeoutException,它永远不会返回ExpectedConditions.elementToBeClickable

因此,如果您使用null来查找始终为您提供可点击元素的元素,那么无需检查ExpectedConditions.elementToBeClickable条件,您应该尝试如下: -

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()link这并不意味着元素不可点击,这意味着返回元素label但可能存在没有事件通过点击操作在元素上执行。

注意: - 我建议您始终先尝试按clickedidname和其他定位器查找元素。如果你遇到一些困难,那么使用className并始终给cssSelector定位器赋予最后一个优先级,因为它比其他定位器更慢以找到一个元素。

希望它可以帮助你.. :)

答案 1 :(得分:10)

有些情况element.isDisplayed() && element.isEnabled()会返回true,但仍然可以点击 元素,因为它被其他元素隐藏/重叠。

在这种情况下,Exception被抓住了:

  

org.openqa.selenium.WebDriverException:未知错误:元素不是   点击点(781,704)。其他元素将收到点击:   <div class="footer">...</div>

请改用此代码:

WebElement  element=driver.findElement(By.xpath"");  
JavascriptExecutor ex=(JavascriptExecutor)driver;
ex.executeScript("arguments[0].click()", element);

它会起作用。

答案 2 :(得分:4)

wait.until(ExpectedConditions)不会返回null,它会满足条件或抛出TimeoutException

您可以检查元素是否已显示并启用

WebElement element = driver.findElement(By.xpath);
if (element.isDisplayed() && element.isEnabled()) {
    element.click();
}

答案 3 :(得分:1)

当元素不可点击时,class属性包含disabled

WebElement webElement = driver.findElement(By.id("elementId"));
if(!webElement.getAttribute("class").contains("disabled")){
    webElement.click();
}

答案 4 :(得分:0)

从源代码中,您可以查看ExpectedConditions.elementToBeClickable(),它会判断元素是否可见并已启用,因此您可以将isEnabled()isDisplayed()一起使用。以下是源代码。

public static ExpectedCondition<WebElement> elementToBeClickable(final WebElement element) {
		return new ExpectedCondition() {
			public WebElement apply(WebDriver driver) {
				WebElement visibleElement = (WebElement) ExpectedConditions.visibilityOf(element).apply(driver);

				try {
					return visibleElement != null && visibleElement.isEnabled() ? visibleElement : null;
				} catch (StaleElementReferenceException arg3) {
					return null;
				}
			}

			public String toString() {
				return "element to be clickable: " + element;
			}
		};
	}

答案 5 :(得分:0)

List<WebElement> wb=driver.findElements(By.xpath(newXpath));
        for(WebElement we: wb){
            if(we.isDisplayed() && we.isEnabled())
            {
                we.click();
                break;
            }
        }
    }

答案 6 :(得分:0)

您必须注意某些事项:

  • WebDriverWaitExpectedConditions结合使用,elementToBeClickable()返回WebElement,一旦它位于 clickable 即< strong>可见和启用
  • 在此过程中,WebDriverWait将忽略在NotFoundException条件下默认遇到的until实例。
  • 一旦 wait 的持续时间在所需元素未位于 clickable 的时间到期时,将引发超时异常。 >
  • 解决此问题的不同方法是:
    • 要在返回元素后立即调用click(),可以使用:

      new WebDriverWait(driver, 10).until(ExpectedConditions.elementToBeClickable(By.xpath("(//div[@id='brandSlider']/div[1]/div/div/div/img)[50]"))).click();
      
    • 要简单地验证元素是否位于 clickable ,请将 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");
          }
      
    • 如果 WebDriverWait 返回位于 clickable 元素,但是该元素仍然不可单击,则需要调用{{1 }}方法如下:

      executeScript()

答案 7 :(得分:0)

有一个名为“cursor”的 CSS 属性,用于确定当鼠标指针悬停在元素上时要显示的鼠标光标类型。

它用于使元素可点击,因此可用于检查元素是否可点击。

答案 8 :(得分:-1)

在我的情况下,显示和启用不起作用,当元素可见但不可单击时,我为true。

  1. 就我而言,当我切换按钮状态时,按钮css的颜色和光标也会改变。要验证按钮是否可点击,我使用了下一种方法:
if (AddDocumentButton.Displayed & AddDocumentButton.GetCssValue("cursor").Equals("pointer") & AddDocumentButton.GetCssValue("color").Equals("rgb(22, 172, 0)"))
{
return true;
}
  1. 我试图单击该按钮,然后将浏览器中的选项卡/窗口数量进行比较。

答案 9 :(得分:-3)

 begin
      @locator.click
      @locator.click
      return true
rescue
      return false
end