Как обнаружить сбой button.click () в Selenium? - PullRequest
0 голосов
/ 02 мая 2019

У меня есть сценарий Selenium 3 Python, который используется для подачи жалоб FTC для ложных вызовов.Сегодня злоумышленник прошел через использование числа «0» (буквальный 0).Веб-сайт FTC отклонил число, но мой сценарий не смог обнаружить ошибку.

Вот соответствующая часть моего сценария Python, которая управляет процессом подачи жалобы. Вот вставка страницы FTC, которая отклоняет номер.Согласно Selenium docs нет возвращаемого значения из button_continue.click() (если я правильно анализирую документы; см. Заголовок Ввод пользователя - заполнение форм ).

# print("Clicking Continue")
button_continue = driver.find_element_by_id("StepTwoSubmitButton")
button_continue.click()

Я также купил книгу Test-Driven Development с Python , но попадания Selenium, которые я обнаружил при поиске в Интернете, оказались двумя страницами в книге.(Это было очень обидно; не рекомендуется для этого типа задач, несмотря на название книги).

Мой вопрос, как я могу обнаружить сбои, используя Selenium 3?


Вот конкретный Javascript для страницы FTC, вызывающий проблему.Это из the pastebin :

<div class="s_form_verif_bttn_sl">
    <label for="StepTwoSubmitButton">
        <input type="submit" name="StepTwoSubmitButton" value="Submit" onclick="validateform();WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions(&quot;StepTwoSubmitButton&quot;, &quot;&quot;, true, &quot;StepTwoEntry&quot;, &quot;&quot;, false, false))" id="StepTwoSubmitButton" accesskey="s" tabindex="17" class="th_s" />
    </label>&nbsp;&nbsp;
    <label for="StepTwoCancelButton"> 
        <input type="submit" name="StepTwoCancelButton" value="Cancel" id="StepTwoCancelButton" accesskey="s" tabindex="18" class="th_s" />
    </label>
</div>

Мне удалось воспроизвести ошибку отправки вручную.Ниже приведен снимок экрана с результатом отправки формы.Когда я наблюдал за процессом в Developer Console, я не видел ничего необычного, как необработанное исключение.

enter image description here


Вот пакетверсии.

$ apt-cache policy chromium-browser
chromium-browser:
  Installed: 73.0.3683.86-0ubuntu0.18.04.1
  Candidate: 73.0.3683.86-0ubuntu0.18.04.1

$ apt-cache policy python3-selenium
python3-selenium:
  Installed: 3.8.0+dfsg1-3
  Candidate: 3.8.0+dfsg1-3

$ apt-cache policy chromium-chromedriver
chromium-chromedriver:
  Installed: 73.0.3683.86-0ubuntu0.18.04.1
  Candidate: 73.0.3683.86-0ubuntu0.18.04.1

$ apt-cache policy python3
python3:
  Installed: 3.6.7-1~18.04
  Candidate: 3.6.7-1~18.04

Ответы [ 2 ]

1 голос
/ 02 мая 2019

Элемент является JavaScript включенным элементом, поэтому для его вызова click(), в идеале вам нужно вызвать WebDriverWait для element_to_be_clickable() и обернуть его в try-catch{} иВы можете использовать любую из стратегий локатора :

  • Использование CSS_SELECTOR:

    try:
        WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input[name='StepTwoSubmitButton']"))).click()
    except TimeoutException as e:
        print("Element click failed")
    
  • Использование XPATH:

    try:
        WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//input[@name='StepTwoSubmitButton')]"))).click()
    except TimeoutException as e:
        print("Element click failed")
    
  • Примечание : необходимо добавить следующий импорт:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    from selenium.common.exceptions import TimeoutException
    
1 голос
/ 02 мая 2019

click() должно вызвать исключение в случае сбоя, и все исключения в привязках клиента Python получены из WebDriverException.

from selenium.common.exceptions import WebDriverException

button_continue = driver.find_element_by_id("StepTwoSubmitButton")
try:
    button_continue.click()
except WebDriverException as e:
    print('oops. click failed')
    print(e)
...