学习在Python中为Selenium Web驱动程序使用Assert和Asserttrue

ws51t4hk  于 2023-02-08  发布在  Python
关注(0)|答案(2)|浏览(185)

我试图让一个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"))

当我在网页上找到一些东西时,有人能告诉我如何写这个部分吗?如果找到了,它会给我反馈。

o2g1uqev

o2g1uqev1#

Selenium包含了一些称为waits的方法来帮助处理这种特定的情况,我会阅读显式等待的文档,另外,还有another Stack Overflow question可能会很有用。
此外,稍微偏离主题的是,以所示代码中的方式使用Assert是不典型的。通常,不应考虑使用Assert来检查条件,而应考虑使用必须为真的条件来通过测试,否则测试将停止,并且没有理由继续。
干杯。

tjrkku2a

tjrkku2a2#

假设您的“Select Error”消息实际上是一个link_text,您可以尝试使用“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

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

相关问题