学习在Python中使用Assert和Asserttrue作为selenium web驱动程序

时间:2015-02-23 20:31:46

标签: python selenium webdriver assert

我试图制作一个python webdriver来加载一个网页,然后断言true并运行一个打印命令,如果有文本或对象,如果不是,我希望它继续运行我的循环。我是python的菜鸟,一直在学习学习python的艰难之路,阅读文档。我花了最后一天左右试图让我的代码找到文本或元素,但它没有反馈信息...这是我的代码到目前为止减去关于进入网页的顶部,我只是这个计数循环的东西断言逻辑。

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)

然后循环重新开始。我遇到的问题是我想找到&#34;选择错误&#34;在网页上以某种形式,链接或文本,然后如果它在那里打印我一个消息,如果没有,只是继续我的循环。

使用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 个答案:

答案 0 :(得分:0)

假设你的&#34;选择错误&#34;邮件实际上是一个link_text,您可以尝试使用&#39; try / except&#39;言。

try:
   WebDriverWait(driver, 3).until(
      expected_conditions.text_to_be_present_in_element((By.LINK_TEXT, "Select Error"), "Select Error")
   )
   print "Link Found..."
except NoSuchElementException:
   pass

此代码试图找到&#34;选择错误&#34;链接文本3秒,捕获NoSuchElementException错误,然后继续您的代码。

答案 1 :(得分:-1)

Selenium包含称为waits的方法来帮助解决这种特殊情况。我会阅读明确等待的文档。此外,还有another Stack Overflow question可能对您有用。

此外,稍微偏离主题,在显示的代码中使用Asserts是非常典型的。一般情况下,您不应该考虑使用Asserts来检查条件,而是考虑传递测试必须为true的条件,否则测试将停止,并且没有理由继续。

干杯。