【发布时间】:2021-09-13 06:52:11
【问题描述】:
除导致 ElementClickInterceptedException 的“31”之外的所有参数都按预期运行相同的测试
基本上,此测试必须检查用户名字段的最大和最小输入长度,并且作为预期结果,css 选择器为p[class="validation-message ng-star-inserted"] 的元素只有在不接受长度并且出现断言消息时才会出现在运行此代码的控制台中
我的测试文件:
import pytest
import sys
import time
from selenium.webdriver.common.by import By
from pages.main_page import MainPage
link = "https://rozetka.com.ua/"
test_len_list = [str(num) for num in range(0,100)]
test_len_list = ['a' for num in range(0, 33)]
test_len_str = "".join(test_len_list)
class TestRegisterPage():
@pytest.mark.len
@pytest.mark.parametrize('num', [0, 1, 2, 31, 32, 64, 128,256])
def test_field_username_len(self, browser, num):
# is it functional testing if I need to make a sequence of steps before reaching to the element I need to test
# Because if some step from this sequence won't work the entire test fails
if num <= 0:
field_value = ''
else:
test_len_list = ['в' for b in range(0,
num)]
field_value = "".join(test_len_list)
page = MainPage(browser, link)
#check if internet connection is present
if not has_connection(page.browser):
print('No Internet connection, aborted!')
page.browser.quit()
else:
page.open()
log_in_btn = page.browser.find_element_by_css_selector("button[class='header__button ng-star-inserted'][type='button']")
log_in_btn.click()
register_btn = page.browser.find_element_by_css_selector("a[class='auth-modal__register-link ng-star-inserted']")
register_btn.click()
# time.sleep(3)
username_input = page.browser.find_element_by_css_selector("input[id='registerUserName']")
username_input.send_keys(field_value)
time.sleep(3)
assert page.is_element_present(
'p[class="validation-message ng-star-inserted"]') == False, "Lenght does not satisfy the requirements"
我的主页文件:
from .base_page import BasePage
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
class MainPage(BasePage):
def click_alert(self):
main_window = self.browser.window_handles[0]
WebDriverWait(self.browser, 5).until(EC.alert_is_present())
alert = self.browser.switch_to.alert
alert.accept()
self.browser.switch_to.window(main_window)
def find_login_button(self):
return self.browser.find_element_by_css_selector("button[class='header__button ng-star-inserted'][type='button']")
def find_register_button(self):
return self.browser.find_element_by_css_selector("a[class='auth-modal__register-link ng-star-inserted']")
我的 BasePage 文件:
from selenium.common.exceptions import NoSuchElementException
class BasePage:
def __init__(self, browser, url, timeout=30):
self.browser = browser
self.url = url
self.browser.implicitly_wait(timeout)
def open(self):
self.browser.get(self.url)
def is_element_present(self, css_selector):
try:
self.browser.find_element_by_css_selector(css_selector)
except NoSuchElementException:
return False
return True
int 类型值“31”的测试结果屏幕截图 test case param 31
【问题讨论】:
-
请分享错误ElementClickInterceptedException的截图,它会提示哪个元素阻塞了你试图点击的元素。
标签: python selenium testing automation