2015-08-24 48 views
0

我有这个代码,如果有time.sleep(2)它点击,如果它不在那里它不点击元素。它甚至没有等到第二如何强制webdriver等待

time.sleep(2) 

WebDriverWait(self.broswer, 30).until(EC.element_to_be_clickable((By.CLASS_NAME, 'something'))) 
self.browser.find_element_by_class_name('something').click() 

我试着用下面的代替

self.browser.implicitly_wait(2) 

但它不等待,我不能使用time.sleep()

+0

这可能意味着元素可以立即点击。你的定位器是否正确? – alecxe

回答

-1

是什么问题与time.sleep() 如果你不想用户time.sleep(),仍然如果你想强迫网络驱动程序等待特定的时间,那么你也可以给条件。

你可以通过下面的网址为Java

http://selenium.googlecode.com/git/docs/api/java/org/openqa/selenium/support/ui/ExpectedConditions.html#invisibilityOfElementLocated-org.openqa.selenium.By-

+0

我不允许使用时间睡眠,我不等待任何事情做任何事情我只想点击按钮,它不等待它只是抛出一个错误,我不明白为什么 –

0

Time.Sleep()以毫秒为单位计时,因此Time.Sleep(2)为2毫秒,也许如果你尝试,

Time.Sleep(2000); 

它可能适合你。

-1

1) 使用time.sleep()(这是在“暂停当前线程的执行对于给定的秒数”),只有当你真正需要它。

2) 学习,深刻,IMPLICIT WAITEXPLICIT WAIT

之间的差异有时候,我有必要强制“体检”硬制品的等待中,我用time.sleep()但我真的建议你理解硒为你提供的两种等待方法之间的区别。

@Dor Alt:请记住(来自文档)“显式等待是您定义的代码,用于在继续执行代码之前等待某种条件发生。”如果您遇到任何类型的错误,请在此处填写并告诉我们您正在使用哪个浏览器进行测试,因为不同的浏览器具有(非常非常非常)不同的行为! :)

我的意思是,如果您使用的是Chrome和IE(据我所知),如果webdriver没有您要点击的元素的可视化,它不会点击!例如,在这种情况下,您应该使用以下脚本来移动/滚动页面:driver.execute_script('window.scrollTo(0,{0})'.format(element.location ['y']))

0

time.sleep()WebDriverWait()是不同的等待方法。避免使用time.sleep()而宁愿使用WebDriverWait是最佳做法。

在另一个评论中,你说你甚至不想等,你只是想点击按钮。如果是这样的话,你应该可以使用这个

self.browser.find_element_by_class_name('something').click() 

但你说你得到一个错误。如果你只运行那一行,你得到的错误是什么?

附注... WebDriverWait。直到()应该返回指定的,所以如果你决定要继续等待,你可以做到这一点

WebDriverWait(self.broswer, 30).until(EC.element_to_be_clickable((By.CLASS_NAME, 'something'))).click() 

我来自一个Java的背景,不知道蟒蛇,所以我可能有一些错别字这里WebElement和那么......但这应该让你朝着正确的方向前进