#python #selenium #if-statement #data-driven-tests
Вопрос:
Я новичок в Selenium /Python, у меня есть проверка входа в систему. когда пользователь попытается войти в систему, если пароль недействителен или истек, он отобразит сообщение об ошибке 2 с другим местоположением. данные поступают из Excel с циклом for. (Платформа, управляемая данными).
Если срок действия пароля для входа истек, он работает нормально. его переход на следующий, если пароль недействителен, все равно его проверка пароля выполняется только при условии истечения срока действия, и существует цикл, и выдается «ошибка». Это не проходит elif
или else
.
print("Login Pass")
else:
time.sleep(5)
try:
if (self.driver.find_element_by_xpath(
self.lp.textbox_ConfirmPassword_xpath).is_displayed() == True)
or (self.lp.verifyInvalidPasswordIsDisplay() == "Invalid username or password"):
if self.driver.find_element_by_xpath(self.lp.textbox_ConfirmPassword_xpath).is_displayed():
self.driver.find_element_by_xpath(self.lp.textbox_ConfirmPassword_xpath).click()
print("expired")
XLUtils.writeData(self.path, 'Sheet2', r, 6, 'Expired password')
elif self.lp.verifyInvalidPasswordIsDisplay() == "Invalid username or password":
print("invalid")
XLUtils.writeData(self.path, 'Sheet2', r, 3, 'Invalid username or password')
else:
XLUtils.writeData(self.path, 'Sheet2', r, 4, 'Error')
else:
print("error")
except NoSuchElementException:
XLUtils.writeData(self.path, 'Sheet2', r, 4, 'Error')
print(self.user)
print("login fail")
self.driver.close()
Комментарии:
1. Привет, Шени, я ответил на твой вопрос. Пожалуйста, взгляните на это.
Ответ №1:
Если он не проходит elif self.lp.verifyInvalidPasswordIsDisplay() == "Invalid username or password":
ни else
через , это потому, что во всех условиях первый вложенный if
(единственный оператор, который проверяет только self.driver.find_element_by_xpath(self.lp.textbox_ConfirmPassword_xpath).is_displayed()
) True
, и он не будет проходить через другие elif
else
операторы nor.
Первый if
(который содержит if-elif-else statements
) ,имеет такое условие:
self.driver.find_element_by_xpath(
self.lp.textbox_ConfirmPassword_xpath).is_displayed() == True
Однако за этим следует другое условие с or
, но, похоже, во всех ситуациях textbox_ConfirmPassword_xpath
оно есть True
.
Так как это условие в точности повторяется в первом вложенном if
, и, следовательно, условие этого if
оператора всегда True
, и оно не позволит проверять другие условия.
Во-первых, на мой взгляд, первое if
не обязательно, и вы могли бы просто выполнять работу без него, вот так:
print("Login Pass")
else:
time.sleep(5)
try:
if self.driver.find_element_by_xpath(self.lp.textbox_ConfirmPassword_xpath).is_displayed():
self.driver.find_element_by_xpath(self.lp.textbox_ConfirmPassword_xpath).click()
print("expired")
XLUtils.writeData(self.path, 'Sheet2', r, 6, 'Expired password')
elif self.lp.verifyInvalidPasswordIsDisplay() == "Invalid username or password":
print("invalid")
XLUtils.writeData(self.path, 'Sheet2', r, 3, 'Invalid username or password')
else:
XLUtils.writeData(self.path, 'Sheet2', r, 4, 'Error')
print('error')
except NoSuchElementException:
XLUtils.writeData(self.path, 'Sheet2', r, 4, 'Error')
print(self.user)
print("login fail")
self.driver.close()
Во-вторых, вам следует выбрать лучшее условие для первого if
вместо self.driver.find_element_by_xpath(self.lp.textbox_ConfirmPassword_xpath).is_displayed()
, так как, как я уже говорил ранее, по-видимому, во всех случаях это условие есть True
.
Более того, я предлагаю использовать Constants
для проверки равенства сообщений об ошибках, например:
Вместо "Invalid username or password"
строки сделайте это:
INVALID_USERNAME_PASS = "Invalid username or password"
.
.
.
self.lp.verifyInvalidPasswordIsDisplay() == INVALID_USERNAME_PASS:
# DO STUFF
Потому что, таким образом, это больше maintainable
, и это hard coded
больше не так.