如何捕获伪造者发送的错误输入,从而使我的自动化不会崩溃?

时间:2019-08-22 21:02:44

标签: python selenium-webdriver automation pycharm faker

情况

我有一个显示人员表的主页和一个“添加新人员”按钮。当您单击它时,会出现模态窗口,其中包含多个输入,并选择供您添加新人。 字段“名称”将验证特殊字符。 模态有一个“保存”按钮,如果每个字段都经过验证,将保存并关闭模态。如果您发送了无效字符,它将验证并触发相关字段下方的警告消息,该模式将保持打开状态,直到您对其进行修复。

问题

我的自动化系统与faker一起使用,有时会用连字符发送名称,导致它在给定情况下失败(当单击“保存”时,模式不会关闭)。

尝试的解决方法

我最初的想法是询问警告消息是否存在或出现,请尝试发送另一个警告消息。 此逻辑失败是因为当faker发送有效名称时,模式将关闭,并且我会询问不再可见的元素(错误消息)(因为模式关闭后我就在main上) )。这会引发ElementNotInteractableException

def create_new_person(self):
    self.find_element(*self.__locators.NAME_INP).send_keys(helpers.generate_name_female())
    # And many other inputs...
    self.find_element(*self.__locators.SAVE_PERSON_BTN).click()
    alert = self.is_element_present(self.__locators.NAME_ALERT_MSG)
        while alert:
        self.find_element(*self.__locators.NAME_INP).send_keys(helpers.generate_name_female())
        self.find_element(*self.__locators.SAVE_PERSON_BTN).click()

也许我可以考虑成功的迹象,那就是模式已关闭并要求这样做,但是我不确定如何实现它,或者甚至可能。

当伪造者填写输入内容时,我应该问什么问题以检查是否存在问题?

1 个答案:

答案 0 :(得分:0)

while self.is_element_present(self.__locators.NAME_ALERT_MSG) is True:

首先,为什么要检查返回值是否具有与布尔常量相同的对象ID?根据您的描述,

while self.is_element_present(self.__locators.NAME_ALERT_MSG):

会的。其次,您没有检查每次调用返回的值。使用局部变量对此进行检测:

alert = self.is_element_present(self.__locators.NAME_ALERT_MSG)
print("alert =", alert)
while alert:
    ...
    alert = self.is_element_present(self.__locators.NAME_ALERT_MSG)
    print("alert =", alert)