有没有一种方法可以用Python trak变量ID



我有测试web应用程序的脚本:

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time

driver = webdriver.Chrome("C:\Program Files\Google\Chrome\Application\chromedriver.exe")
time.sleep(2)
driver.get("https://website.com")
driver.find_element_by_id('user-email').send_keys("LOGIN")
driver.find_element_by_name('password').send_keys("PASSWORD" + Keys.RETURN)
time.sleep(5)
driver.find_element_by_id("ext-element-1234").click()

我对最后一个标尺有问题——这个应用程序有不同的页面ID,所以每次页面刷新应用程序都会生成其他ID名称(ext-element-1235、ext-element-1236、ext-eelement-1237、ext-erument-1238等等……(,所以不可能测试这个应用程序,因为Python总是说;没有这样的元素:无法定位";

有没有其他方法可以追踪它?Xpath也没用,因为它也是可变的ID。也许这是一种列出它并告诉Python在ID不存在时忽略ID并尝试从列表中跟踪其他ID的方法?

如果我能更好地了解这个元素是什么,它是如何命名的,以及为什么名称每次都会更改,那么会更容易提供帮助。我相信,你可以通过获取多个元素,然后扫描它们来识别id与你的命名约定匹配的元素来解决你的问题(假设你没有这样的多个元素(。如果你查看文档,有多种方法可以做到这一点。因此,基本上,我们的建议是找出筛选出您想要的元素的最佳方法(即,获得一个与您想要匹配的元素但尽可能少的其他元素匹配的条件相匹配的所有元素的列表。(然后迭代返回的元素列表,看看元素的id是否看起来应该如此。考虑到您的编写,这可能像if element.get_id()[:12] == "ext-element-":process(element)一样简单(请注意,我不确定您需要使用哪种硒方法来从元素中获取id,我的示例应该作为伪代码。(

您的案例的常见解决方案是只使用ID的静态部分,而忽略动态的部分:

driver.find_element_by_xpath("//*[starts-with(@id, 'ext-element-')]").click()

最新更新