Selenium Python Pytest 使用参数化测试测试网页。 ElementClickInterceptedException
Selenium Python Pytest testing a web page using parametrized tests. ElementClickInterceptedException
与预期相同的测试 运行s,除了“31”之外的所有参数都会导致 ElementClickInterceptedException
基本上,此测试必须检查用户名字段的最大和最小输入长度,并且作为预期结果,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
你试过用JS点击吗?
element = driver.find_element_by_id("myid")
driver.execute_script("arguments[0].click();", element)
用上面的替换你的点击函数试试。
log_in_btn = page.browser.find_element_by_css_selector("button[class='header__button ng-star-inserted'][type='button']")
driver.execute_script("arguments[0].click();", log_in_btn )
register_btn = page.browser.find_element_by_css_selector("a[class='auth-modal__register-link ng-star-inserted']")
driver.execute_script("arguments[0].click();", register_btn)
与预期相同的测试 运行s,除了“31”之外的所有参数都会导致 ElementClickInterceptedException
基本上,此测试必须检查用户名字段的最大和最小输入长度,并且作为预期结果,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
你试过用JS点击吗?
element = driver.find_element_by_id("myid")
driver.execute_script("arguments[0].click();", element)
用上面的替换你的点击函数试试。
log_in_btn = page.browser.find_element_by_css_selector("button[class='header__button ng-star-inserted'][type='button']")
driver.execute_script("arguments[0].click();", log_in_btn )
register_btn = page.browser.find_element_by_css_selector("a[class='auth-modal__register-link ng-star-inserted']")
driver.execute_script("arguments[0].click();", register_btn)