6

我的网页中有以下代码。

<div id="" class="user_acc_setails">
<ul id="accDtlUL">
<li>First Name: <span id="f_name">Anuja</span></li>

到页面加载时,未设置Sapn的值。设置值需要很短的时间。我想等待并在我的Python文件中获取该值。

我目前正在使用以下代码,

element = context.browser.find_element_by_id('f_name')
assert element.text == 'Anuja'

但它给了我一个AssetionError。我该如何解决这个问题?

谢谢

4

5 回答 5

6

在这种情况下,正确的方法是使用显式等待(请参阅那里的 Python 代码)。所以你需要类似的东西

from selenium.webdriver.support import expected_conditions as EC
wait = WebDriverWait(driver, 10)
element = wait.until(EC.text_to_be_present_in_element((By.Id,'f_name'), 'Anuja'))
于 2013-09-04T09:02:59.327 回答
4

这是一个执行此操作的函数;

def wait_on_element_text(self, by_type, element, text):
        WebDriverWait(self.driver, 10).until(
            ec.text_to_be_present_in_element(
                (by_type, element), text)
        )

其中 by_type 替换为例如 By.XPATH, By.CSS_SELECTOR 。其中元素替换为元素路径 - 元素 xpath、唯一选择器、id 等。其中文本替换为元素的文本,例如与元素关联的字符串。

于 2015-10-01T14:12:33.567 回答
1
url = "http://..."
driver = webdriver.Firefox()
driver.get(url)

wait = WebDriverWait(driver, 10)
try:
    present = wait.until(EC.text_to_be_present_in_element((By.CLASS_NAME, "myclassname"), "valueyouwanttomatch"))
    elem = driver.find_element_by_class_name("myclassname")
    print elem.text
finally:
driver.quit()

我意识到的返回对象wait.until不是一个元素,而是一个布尔变量,所以我不得不再次调用定位元素。

于 2015-11-12T21:26:32.613 回答
0

您可以使用 browser.implicitly_wait(2) 命令隐式等待浏览器。

from selenium import webdriver
browser = webdriver.Firefox()
browser.implicitly_wait(2)
于 2013-09-04T09:13:31.287 回答
0

我找到了解决方案。可能这不是正确的方法。我所做的是在查找元素之前使用 Python sleep 并断言它的值。

import time
...

time.sleep(3)
element = context.browser.find_element_by_id('f_name')
assert element.text == 'Anuja'

然后它工作得很好。

于 2013-09-04T07:49:23.763 回答