gpt4 book ai didi

javascript - wait.until(ExpectedConditions.elementToBeClickable) 不起作用

转载 作者:行者123 更新时间:2023-12-01 00:38:47 27 4
gpt4 key购买 nike

我需要通过 By 获取所有元素从页面定位器并从中确定可点击元素。

  • 用于更好理解的屏幕截图:

Invisible element

Invisible element

Visible and clickable element

Visible and clickable element

<小时/>
  • html 代码 a.quick-view元素:

    <a href="http://prestashop-automation.qatestlab.com.ua/ru/blouses/2-7-blouse.html#/1-size-s/11-color-black" class="thumbnail product-thumbnail">
    <img src="http://prestashop-automation.qatestlab.com.ua/7-home_default/blouse.jpg" alt="" data-full-size-image-url="http://prestashop-automation.qatestlab.com.ua/7-large_default/blouse.jpg">
    </a>
    <div class="product-description">
    <h1 class="h3 product-title" itemprop="name"><a href="http://prestashop-automation.qatestlab.com.ua/ru/blouses/2-7-blouse.html#/1-size-s/11-color-black">Blouse</a></h1>
    <div class="product-price-and-shipping">
    <span itemprop="price" class="price">26,99&nbsp;₴</span>
    </div>
    </div>
    <ul class="product-flags">
    </ul>
    <div class="highlighted-informations hidden-sm-down">

    //============================

    <a href="#" class="quick-view" data-link-action="quickview"> //Searching element
    <i class="material-icons search"></i> Быстрый просмотр
    </a>

    //=============================

    <div class="variant-links">
    <a href="http://prestashop-automation.qatestlab.com.ua/ru/blouses/2-8-blouse.html#/1-size-s/8-color-white" class="color" title="White" style="background-color: #ffffff"><span class="sr-only">White</span></a>
    <a href="http://prestashop-automation.qatestlab.com.ua/ru/blouses/2-9-blouse.html#/2-size-m/11-color-black" class="color" title="Black" style="background-color: #434A54"><span class="sr-only">Black</span></a>
    <span class="js-count count"></span>
    </div>
    </div>

因此,我通过 //a[@class='quick-view'] 搜索元素xpath 定位器并尝试按 wait.until(ExpectedConditions.elementToBeClickable) 过滤它们:

public List<WebElement> getElementsIfClickable(PageElement element){
List<WebElement> e = findAll(element);
//e.get(0).click(); //WebDriverException: unknown error: Element <a href="#" class="quick-view" data-link-action="quickview">...</a> is not clickable at point (534, 840)
WebDriverWait wait = new WebDriverWait(driver, 2);
return e.stream()
.filter(p -> isClickable(p, wait))
.collect(Collectors.toList());
}

private boolean isClickable(WebElement element, WebDriverWait wait) {
try {
WebElement el = wait.until(ExpectedConditions.elementToBeClickable(element));
System.out.println(el.isDisplayed()); //DEBUG: always "true"
//el.click(); //no exception
return el.isDisplayed();
} catch (Exception e) {
return false;
}
}

因此,在“DEBUG ”行中,我始终为true,但元素不可点击且不显示。

我不需要点击每个元素 - 我只需要检查可点击属性。

问题:

如何通过可点击属性检查元素

最佳答案

我不确定您所说的可点击属性到底是什么意思。从技术上讲,页面上的所有内容都是可点击的元素。例如,您可以单击文本,但什么也不会发生。以下是元素不可点击的唯一原因是禁用属性的使用方式如下:

<button type="button" disabled>Click Me!</button>

下面是一些禁用属性的链接: Input Disabled Field Disabled

但是,在您的情况下,您指的是始终可点击的 anchor 标记,但可以通过三种方式禁用(禁用我的意思是当您单击它时什么也不会发生):

  1. 未设置“href”属性
  2. 被 CSS 禁用
  3. href 设置或 onclick 设置返回 false:

<a href="javascript:function() { return false; }">link</a>
<a href="/" onclick="return false;">link</a>
如果你仍然想测试这个元素是否可点击,你可以使用肮脏的 JavaScript 方式,如下所示:

JavascriptExecutor js= (JavascriptExecutor)driver;
String url = driver.getCurrentUrl();
js.executeScript("arguments[0].click();", element);
//may need a wait here
if(url.equalsIgnoreCase(driver.getCurrentUrl())) {
js.executeScript("window.history.go(-1);");
}else {
//element is not clickable
}

可能不是最好的解决方案,但它有效:)

关于javascript - wait.until(ExpectedConditions.elementToBeClickable) 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57871787/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com