我试图让一个python webdriver加载一个网页,然后Asserttrue,并运行一个打印命令,如果有文本或对象,如果没有,我希望它只是继续运行我的循环。我是一个noob的python,并一直在学习学习python的艰苦方式,并阅读文档。我花了最后一天左右,试图让我的代码查找文本或元素,但是它不会反馈信息...这是我到目前为止的代码,减去关于去网页的顶部部分,我只是这个计数循环Assert逻辑的东西。
count = 1000.00
while count < 1000.03:
driver.find_element_by_id("select").clear()
driver.find_element_by_id("select").send_keys(str(count))
time.sleep(1)
driver.find_element_by_id("BP").click()
driver.find_element_by_id("BP").click()
count += 0.01 ## increases count to test
highervalue = driver.find_element_by_link_text("Select Error")
assertTrue(driver.link_contains_match_for("")) ##could also be, ##text_containt_match_for("ex") or driver.assertTrue(element in WEBPAGE)??
print 'Someone is %.7r' %count
else:
print 'I have %.7r' %count
time.sleep(1)
然后循环又重新开始。我遇到的问题是我想在网页上以某种形式、链接或文本找到“选择错误”,然后如果有就打印一条msg给我,如果没有,就继续我的循环。
使用assert/asserttrue或类似的语句更好吗
def is_element_present(self, how, what):
try: self.driver.find_element(by=how, value=what)
except NoSuchElementException, e: return False
return True
或
我搜索过的其他一些例子也可以使用:
self.assertTrue(self.is_element_present(By.ID, "FOO"))
self.assertTrue(self.is_element_present(By.TEXT, "BAR"))
self.assertTrue(self.is_text_present("FOO"))
self.assertTrue(self.driver.is_text_present("FOO"))
当我在网页上找到一些东西时,有人能告诉我如何写这个部分吗?如果找到了,它会给我反馈。
2条答案
按热度按时间o2g1uqev1#
Selenium包含了一些称为waits的方法来帮助处理这种特定的情况,我会阅读显式等待的文档,另外,还有another Stack Overflow question可能会很有用。
此外,稍微偏离主题的是,以所示代码中的方式使用Assert是不典型的。通常,不应考虑使用Assert来检查条件,而应考虑使用必须为真的条件来通过测试,否则测试将停止,并且没有理由继续。
干杯。
tjrkku2a2#
假设您的“Select Error”消息实际上是一个link_text,您可以尝试使用“try/except”语句。
此代码尝试查找“Select Error”链接文本3秒钟,捕获NoSuchElementException错误,然后继续执行代码。