Ответ от метода WebDriverWait element_to_be_clickable () в Селен Python - PullRequest
0 голосов
/ 29 августа 2018

Я создаю скрипт автоматизации, который откроет браузер и войдет в портал. Он должен нажать несколько кнопок и страниц. Я использую селен в Python, поэтому, например, чтобы нажать кнопку, я использую WebDriverWait:

BTN= (By.XPATH, '''//a[@ui-sref="app.colleges.dashboard({fid: app.AppState.College.id || Colleges[0].id, layout: app.AppState.College.layout || 'grid' })"]//div[@class='item-inner']''')

WebDriverWait(driver, 20).until(EC.element_to_be_clickable(BTN)).click()

Есть ли какой-либо код возврата или любой код ответа, который я могу получить от WebDriverWait, чтобы в сценарии я был уверен, что он успешно выполняется, и я могу продолжить работу

1 Ответ

0 голосов
/ 29 августа 2018

Ваш код пробной версии довольно хорош, что выглядит следующим образом:

WebDriverWait(driver, 20).until(EC.element_to_be_clickable(BTN)).click()

Метод expected_conditions element_to_be_clickable() возвращает WebElement , когда он равен видим и включен , поэтому вы можете напрямую вызывать метод click() для него.

Теперь, согласно вашему обновлению комментария, если вы хотите реализовать 3-4 попытки повторения , чтобы щелкнуть по элементу, вы можете использовать следующее решение:

from selenium import webdriver  
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException

BTN= (By.XPATH, '''//a[@ui-sref="app.colleges.dashboard({fid: app.AppState.College.id || Colleges[0].id, layout: app.AppState.College.layout || 'grid' })"]//div[@class='item-inner']''')
for i in range(3):
    try:
        WebDriverWait(driver, 5).until(EC.element_to_be_clickable(BTN)).click()
        print("Element was clicked")
        break
    except TimeoutException:
        print("Timeout waiting for element")

driver.quit()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...