Python Selenium:循环网页,直到找到元素



我正在尝试编写一个自动化测试,该测试将转到特定网页,单击其中的链接并停留在下一页。下一页不会总是显示(有时它会显示连接错误(,所以我让它找到一个特定的元素(应该在我正在寻找的页面中(,如果找到该元素,它会留在那里,如果没有,然后回到脚本的开头(做一个循环(。我可以让它转到页面并单击链接,但是当发生连接错误时,它只会停留在那里,不会返回。我对python和Selenium很陌生,所以可能有些东西我还没有完全理解,但我正在通过实践来学习。我被困在这里:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException
from selenium.common.exceptions import NoSuchElementException
def driver_init():
driver = webdriver.Chrome(executable_path=r'C:#the path')
driver.get('#the webpage')
element = driver.find_element(By.XPATH, '//*[@id="conten"]/table/tbody/tr[1]/td/a')
element.click()
elt = driver.find_element(By.XPATH,'//*[@id="logint"]/div/a/img')
elt = True
driver_init()
while elt = False:
driver_init()

如果未显示元素,如何使其重复脚本? 或者如果发生连接错误,如何使其重复脚本?这不是刷新页面,而是回到起点,我尝试了很多东西,但没有一个帮助我,所以这些尝试可能会留下一些文本。提前感谢您的帮助。

您描述的是需要在页面加载后对结果执行条件。 硒 等待一个元素,会通过或失败,但根据我的经验,不允许条件逻辑环绕它。一旦找不到元素,测试结束。除了您的示例之外,A/B 测试还可能发生这种情况,其中 30% 的时间加载不同的页面,并且您希望根据加载的不同结果转移测试。

您可以执行的操作 创建一个保存主测试自动化的方法,以及一个辅助方法来处理等待或重新启动测试。 此辅助方法使用正则表达式在页面源中查找项目。 正则表达式可以围绕它构建一个条件,而不会过早结束测试。下面是一个示例:

import re # Importing the RegEx library
def your_test(driver):
# your selenium test code up to when you need to wait
# I'm passing the defined webdriver along with the text I'm looking for in the page source.
find_or_restart(driver, "Thank You!") 
# your test code after something is found found on page....
def find_or_restart(driver, text):
src = driver.page_source # loading page source
text_found = re.search(r'%s' % (text), src) # regex looking for text
print("checking for text on page...")
if text_found:
return
else:
print("not found. restart test...")
your_test(driver)

应调查连接错误。

另一方面,如果失败情况在 100% 的时间内发生,则会出现无限循环。 您可以添加一个计数器作为全局变量,该计数器在每次触发 else 条件时递增。 然后在 find_or_restart 方法中,检查计数器的值,如果该值大于指定数量,则以失败结束测试。

有时,QA 社区会争辩说,这样的测试(例如解决连接错误(不是有效的解决方法。 相反,他们会建议测试人员应该让它失败,以便有人可以解决您尝试解决的问题(。 这可能是一般的最佳实践,但是,在某些情况下,您可能会与第三方一起测试无法控制其正常运行时间。 有时需要解决方法。 这方面的例子在电信(自动化跨越多个运营商的电话(或为游戏构建机器人等方面比比皆是。 无论如何,我希望这有所帮助。

首先,你应该使用硒等待元素存在。 在失败时重复部分代码不是一种常见的做法。为什么此页面并不总是正确加载?

我不打算在这里编码。我正在给你编写的解决方案,并希望自己编写它。


步骤 1:创建两个方法 1st 初始化 Web 驱动程序。 2nd 杀死网络驱动程序


第 2 步:将 FLAG 声明为 false,一旦初始化 Web 驱动程序并调用 chrome,请使用 WEBDRIVER WAIT 执行查找特定元素的活动。 如果找到,请继续执行下一步并将 FLAG 设置为 true。


第 3 步:如果 FLAG 仍然为 false,则调用 KILL WEBDRIVER 方法,然后调用 driver_init((: 方法


最新更新