2015-02-23 38 views
0

我试图让一个python webdriver加载一个网页,然后声明true并运行一个打印命令,如果文本或对象存在,如果不是,我希望它只需继续运行我的循环。我是Python的noob,并且已经从Learn Python的Hard Way学习,并阅读文档。我花了最后一天左右,试图让我的代码找到文本或元素,但它不反馈信息...这是我的代码到目前为止减去关于转到网页的顶部,我只是在这个计数循环的东西断言逻辑。学习在Python中使用Assert和Asserttrue来实现硒web驱动程序

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) 

然后循环再次开始。我遇到的问题是我想在网页上以某种形式,链接或文本找到“选择错误”,然后如果它在那里打印我一个味精,如果不是,继续我的循环。

是它更好地使用断言/ 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")) 

有人可以让当我在网页中找到某些东西时,我知道如何编写该部分,并且如果找到了它,会给我提供反馈?

回答

-1

硒含有称为waits的方法来帮助解决这种特定情况。我会阅读显式等待的文档。此外,还有another Stack Overflow question这可能是有用的看看。

另外,稍微偏离了主题,在显示的代码中使用Asserts是非典型的。一般来说,您不应该想到使用Asserts来检查条件,而是考虑通过测试必须满足的条件,否则测试会停止并且没有理由继续。

干杯。

+0

谢谢,我读了一下等待和其他问题。你认为在这个循环中检查文本条件的最好方法是什么?我不认为我需要它来等待条件,我希望它尽可能快地检查每个数字,直到页面加载计数错误。 – Alan 2015-02-23 22:27:20

+0

我可以使用预期的参数吗? selenium.webdriver.support.expected_conditions.text_to_be_present_in_element(locator,text_) 基础:对象 期望检查给定文本是否存在于指定元素中。定位器,文本。 但是,如果存在,我该如何打印它,或者如果不存在,只是继续循环而不打印? – Alan 2015-02-23 22:37:27

+0

或甚至这我也无法去工作,当然因为驱动程序查找元素不返回True或False值,如果它确实我会在这里我的答案。那么,我怎么能找到这个文本呢? error = driver.find_element_by_link_text(“Select Error”)。文字 \t \t \t如果(错误== true):表明 \t \t \t \t打印 '有人为%.7r' %计 \t \t \t其他: \t \t \t \t打印 '我有%.7r' %计 – Alan 2015-02-23 22:56:44

0

假设你的“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 

此代码试图找到“选择错误”的链接文本为3秒,捕获NoSuchElementException异常错误,然后用你的代码继续。

相关问题