我有一个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("StepTwoSubmitButton", "", true, "StepTwoEntry", "", false, false))" id="StepTwoSubmitButton" accesskey="s" tabindex="17" class="th_s" />
</label>
<label for="StepTwoCancelButton">
<input type="submit" name="StepTwoCancelButton" value="Cancel" id="StepTwoCancelButton" accesskey="s" tabindex="18" class="th_s" />
</label>
</div>
我能够手动重现提交失败。以下是提交表单结果的屏幕截图。当我在开发人员控制台中观看该过程时,没有发现任何异常现象,例如未捕获的异常。
这里是软件包版本。
$ 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
答案 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")