我的网站上有一个客户端数组,是从我的数据库构建的。在这个数组的每一行中,我都有一个带有链接的字段填充,您可以在其中单击以在另一个页面上重定向(地址是这样的:localhost / display / client / {client_id})
我想做一个循环测试。对于每次迭代,我得到n + 1客户端ID,我点击链接,然后将登录页面与从我刚刚获得的ID构建的字符串进行比较。问题是我的阵列行号没有修复。
我制作了测试代码:
i = 1
while self.driver.find_element_by_xpath("//div[@id='wrapper']/table[contains(@class, 'table')]/tbody/tr[" + str(i) + "]").text is not None:
id = self.driver.find_element_by_xpath("//div[@id='wrapper']/table[contains(@class, 'table')]/tbody/tr[" + str(i) + "]/td[1]").text
self.assertEqual(i + 1, int(id))
i = i + 1
它工作得很好,除了我的停止条件行有例外:self.driver.find_element_by_xpath("//div[@id='wrapper']/table[contains(@class, 'table')]/tbody/tr[" + str(i) + "]")
NoSuchElementException: Message: Unable to locate element: {"method":"xpath","selector":"//div[@id='wrapper']/table[contains(@class, 'table')]/tbody/tr[7]"}
似乎"不是无"不工作,循环失败。我没有设法找到有关find_element_by_xpath()函数返回值的任何知识。
你知道吗?非常感谢你。答案 0 :(得分:0)
在While
之前尝试此操作,验证该元素是否已启用或显示;可以通过以下方式实现:
例如:
element.isEnabled();
or
element.isDisplayed();
如果这是真的,继续下一步或返回。希望这能解决你的问题
答案 1 :(得分:0)
如果找不到该元素,则会抛出异常,然后才能执行.text is not None
。试试这个:
from itertools import count
for i in count(1):
elems = self.driver.find_elements_by_xpath("//div[@id='wrapper']/table[contains(@class, 'table')]/tbody/tr[%s]" % i)
if not elems:
break
self.assertEqual(1, len(elems))
self.assertEqual(i + 1, int(elems[0].find_element_by_xpath("./td[1]").text))
关键更改是find_element
s _by_xpath
,如果找不到任何元素,则不会引发异常。但是,我们还必须确保它不会返回多个元素。
我还摆脱了i
的手动计算,使用了xpath的基本字符串插值,并从td
开始发现tr
而不是根。 / p>