Селен подождать, пока элемент кликабелен, используя относительный элемент в python - PullRequest
0 голосов
/ 29 февраля 2020

Есть способ использовать метод element_to_be_clickable, передав в качестве параметра webelement, а не локатор (By), как это можно сделать в Java.

Проблема в том, что элемент, который я хочу дождитесь, пока он станет кликабельным, получая его путем относительного поиска по xpath в другом веб-элементе.

<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?

1 Ответ

0 голосов
/ 29 февраля 2020

Вы можете использовать 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")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...