Selenium使用python中的相对元素,等待元素可单击

2024-09-30 18:13:22 发布

您现在位置:Python中文网/ 问答频道 /正文

有一种方法可以使用element-to-be-clickable方法,方法是将webelement而不是locator(by)作为参数传递给Java

问题是,我要等待的元素是通过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是否有同样的方法


Tags: 方法divvarmyitemslijavaul
1条回答
网友
1楼 · 发布于 2024-09-30 18:13:22

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

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")

相关问题 更多 >