如何检测Selenium中的button.click()故障?

时间:2019-05-01 23:28:50

标签: python selenium selenium-chromedriver webdriverwait error-checking

我有一个Selenium 3 Python脚本,用于将FTC complaints提交给讨厌的电话。今天,使用数字“ 0”(字面数字0)解决了一个错误的问题。 FTC网站拒绝了该号码,但我的脚本无法检测到该失败。

这是我的Python脚本的相关部分,它驱动了投诉流程。 FTC页面的Here is a pastebin拒绝该号码。根据{{​​3}},button_continue.click()没有返回值(如果我正确解析了文档;请参见标题用户输入-填写表单)。

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

我还购买了Selenium docs本书,但是我在网上搜索时发现的Selenium命中结果是本书的两页。 (这非常令人失望;尽管有书名,也不建议用于这种类型的任务。)

我的问题是,如何使用Selenium 3检测故障?


这是导致故障的FTC页面的特定Javascript。来自Test-Driven Development with Python

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

我能够手动重现提交失败。以下是提交表单结果的屏幕截图。当我在开发人员控制台中观看该过程时,没有发现任何异常现象,例如未捕获的异常。

the pastebin


这里是软件包版本。

$ 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 个答案:

答案 0 :(得分:0)

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)

答案 1 :(得分:0)

该元素是启用了JavaScript的元素,因此理想情况下在其上调用click()时,您需要为element_to_be_clickable()引入 WebDriverWait 并将其包装在{ {1}},您可以使用Locator Strategies中的任何一个:

  • 使用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")