当前位置: 首页 > 知识库问答 >
问题:

硒等到元素是可点击的,在python中使用相对元素

袁志专
2023-03-14

有一种方法可以使用element\u to\u be\u clickable方法,方法是将webelement作为参数传递,而不是像Java中那样传递定位器(by)。

问题是,我想等待的元素是通过xpath在另一个webelement中以相对方式查找来获得的,直到它可单击为止。

<ul class="my-list">
    <li>Coffee</li>
    <li>Tea
        <div class="acction">
            click-me
        </div>
    </li>
    <li>Milk</li>
    <li>bread
        <div class="acction">
            click-me
        </div>
    </li>
</ul>

我的Java代码

var items = driver.findElementsByXPath("//ul[@class='my-list']//li");
items.forEach(item -> {
    try {
        var action = item.findElement(By.xpath(".//div[@class='acction']"));
        wait.until(ExpectedConditions.elementToBeClickable(action)).click();
    } catch (NoSuchElementException ignored) {
    }
});

在python中使用selenium有没有同样的方法?

共有1个答案

柯振濂
2023-03-14

您可以使用WebDriverWait和lambda等待简单的自定义条件:

wait = WebDriverWait(driver, 5)

parent = driver.find_element_by_css_selector("some element")

wait.until(lambda ignore:
           parent.find_element_by_css_selector("child element").is_displayed()
           and parent.find_element_by_css_selector("child element").is_enabled()
           , "Element is clickable")

使用自己的类:

class element_to_be_clickable(object):
    def __init__(self, element):
        self.element = element

    def __call__(self, ignored):
        if self.element.is_displayed() and self.element.is_enabled():
            return self.element
        else:
            return False

wait = WebDriverWait(driver, 5)

parent = driver.find_element_by_css_selector("some element")
wait.until(element_to_be_clickable(parent.find_element_by_css_selector("input")), "Element is clickable")
 类似资料:
  • 用我在selenium的初学者知识,我试图找到点击元素,打开链接。这些项目的链接没有href。我如何执行点击正确的元素打开链接。 我正在使用python、selenium、chrome web驱动程序、BeautifulSoup。所有库都已更新。 下面是示例html片段,其中有一个我需要使用selenium点击的标题。请让我知道,如果你需要更多的html源。此代码来自仅限“登录”的网站。

  • 我有一个动态加载的页面,其中包含一个按钮。我正在尝试等待selenium使用C#绑定点击按钮。我有以下代码: 不过这不管用。click事件永远不会被触发。selenium脚本不会抛出异常警告ID为“addInspectionButton”的元素不存在。它只是不能点击它。如果我加一根线。Sleep(3000)在wait语句和我获得按钮元素句柄的那一行之间。 我没有使用预期条件.元素在这里正确点击吗?

  • 我最近将selenium升级到最新版本(2.53),将firefox升级到最新版(45.0.1)。 我在相同的网站上运行相同的代码,但我突然有很多这样的例外: Web 驱动程序异常: 消息: 元素在点 (312, 8.816665649414062) 不可单击。其他元素将收到单击: 例如: 有什么我应该注意的新东西吗?我之前的python selenium版本相当旧,而且我在Firefox 38上

  • 我正在使用selenium测试脚本。我得到以下错误和这个错误随机发生。当我跑10次时,我会得到大约两次。所以它不是真的可复制的。有人知道为什么会这样吗?我试图单击的元素在浏览器中绝对可见,并且不会四处移动,因此不需要调整大小或拖动元素。我正在使用chrome webdriver,我阅读了其他故障排除策略(调试“Element is not clickable at point”错误),它们似乎与我

  • 我正在尝试自动“Tableau”登录屏幕和下载报告流程。在我到达“下载”按钮之前一切正常。第一个问题是我无法右键单击下载按钮并在Chrome进行“检查”,这很奇怪。我不知何故能够通过浏览整个页面来找到xpath。当我尝试单击它时,我得到“由:org.openqa.selenium.NoSuchElementException引起:没有这样的元素:无法定位元素:{"方法":"xpath","sele

  • 我用的是C#硒。WebDriver.2.44.0在某个第三方网站上,我试图按下一个元素并得到这个: 我得到了元素,点击我得到了: 该项目是在一些子菜单显示后,我成功地按下父菜单。也放5秒睡眠保险点手风琴看的很清楚(在我眼里也是看的很清楚)。 问题 - 在第三方网站上,如何强制点击此项目?