【问题标题】:Learning to use Assert and Asserttrue in Python for selenium web driver学习在 Python 中使用 Assert 和 Asserttrue 进行 selenium Web 驱动程序
【发布时间】:2015-02-23 20:31:45
【问题描述】:

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

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)

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

使用 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"))

当我在网页中找到某些内容时,有人可以告诉我如何编写该部分并且如果找到它会给我反馈吗?

【问题讨论】:

    标签: python selenium webdriver assert


    【解决方案1】:

    Selenium 包含称为waits 的方法来协助处理这种特定情况。我会阅读显式等待的文档。此外,还有another Stack Overflow question 可能有用。

    此外,稍微偏离主题的是,以您在所示代码中的方式使用 Asserts 是不典型的。一般来说,您不应该考虑使用 Asserts 来检查条件,而应该考虑使用必须为真才能通过测试的条件,否则测试将停止并且没有理由继续进行。

    干杯。

    【讨论】:

    • 谢谢,我读了一些关于等待和其他问题的内容。您认为我在此循环中检查文本条件的最佳方法是什么?我认为我不需要它来等待条件,我希望它尽可能快地检查每个数字,直到页面加载计数错误。
    • 我可以使用预期的参数吗? selenium.webdriver.support.expected_conditions.text_to_be_present_in_element(locator, text_) 基础:object 检查给定文本是否存在于指定元素中的期望。定位器,文本。但是,如果存在,我如何让它打印,或者如果不存在,则继续循环而不打印?
    • 或者即使是这个我也无法开始工作,当然因为驱动程序查找元素不会返回 True 或 False 值,如果它返回,我会在这里得到我的答案。那么我怎样才能从找到这个文本中返回一个 true 呢? error = driver.find_element_by_link_text("Select Error").text if (error == true): print 'Someone is %.7r' %count else: print 'I have %.7r' %count
    【解决方案2】:

    假设您的“选择错误”消息实际上是一个链接文本,您可以尝试使用“try/except”语句。

    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
    

    此代码尝试查找“选择错误”链接文本 3 秒,捕获 NoSuchElementException 错误,然后继续执行您的代码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多