python - Selenium Python Pytest 使用参数化测试测试网页。ElementClickInterceptedException
问题描述
除了导致 ElementClickInterceptedException 的“31”之外,所有参数都按预期运行相同的测试
基本上,此测试必须检查用户名字段的最大和最小输入长度,并且作为预期结果,p[class="validation-message ng-star-inserted"]
只有在不接受长度并且断言消息出现在运行此命令的控制台中时,才必须出现css 选择器的元素代码
我的测试文件:
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的值“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)
推荐阅读
- python - 将 Azure 翻译的 PDF 文件保存为 MS Word docx 文件
- python-3.x - Python 网络日志记录示例 - 如何禁用服务器端控制台打印
- javascript - 让 Bootstrap 日期选择器显示为字符串,但格式为 yyyy-mm-dddd
- java - 我无法让它在 java 中的工资单程序上正确扣除。我得到的错误是我的变量之一尚未初始化
- javascript - Vue.js/NuxtJS - 如何创建具有可通过 JSON 配置文件自定义的默认设计的组件
- docksal - Docksal 和 Git 浅问题
- javascript - React-Redux:操作已分派,但 Reducer 未更新状态
- python - 为什么带有 @tf.function 的 TensorFlow 2.x 的速度是 pytorch 的两倍?
- bison - 我的解析器没有意识到它应该采用规则的第二个分支
- excel - 如何在 Excel 中为注释的特定行(存在条件)着色?