wait = WebDriverWait(driver,30).until(lambda driver: driver.find_element_by_xpath('//tbody/tr[296]/td/div'))
据我了解,这将等待 xpath 加载或超时 30 秒。3/7 次左右,我的程序会失败并说找不到这个 div,但我不知道为什么。我想也许它没有加载,所以我尝试了这段代码,以及 driver.implicitly_wait(30),但有时它仍然找不到 xpath。
编辑:这是我的代码
def testPolicy(self):
driver = self.driver
driver.get('website')
wait = WebDriverWait(driver,20).until(lambda driver: driver.find_element_by_name('accessFrame'))
driver.switch_to_frame('accessFrame')
driver.find_element_by_name('adminName').send_keys('jacob')
driver.find_element_by_name('pass').send_keys('123')
driver.find_element_by_xpath('//*[@id="ext-gen1009"]/form/table/tbody/tr[8]/td/input').click()
wait = WebDriverWait(driver,20).until(lambda driver: driver.find_element_by_id('navigationButton-btnInnerEl'))
driver.find_element_by_id('button-1034-btnInnerEl').click()
nav = driver.find_element_by_id('navigationButton-btnInnerEl')
if nav.text == 'Classic':
nav.click()
wait = WebDriverWait(driver,30).until(lambda driver: driver.find_element_by_xpath('//tbody/tr[296]/td/div'))
policy = driver.find_element_by_xpath('//tbody/tr[296]/td/div')
print policy.text
assert policy.text == 'Policies'
policy.click()
wait = WebDriverWait(driver,30).until(lambda driver: driver.find_element_by_xpath('//span[text()="Add Folder"]'))
driver.find_element_by_xpath('//span[text()="Add Folder"]').click()
alert = driver.switch_to_alert()
rand = random.choice(range(100))
driver.find_element_by_id('ext-gen1001').send_keys('autoPolicy'+str(rand))
driver.find_element_by_id('button-1009-btnInnerEl').click()
driver.refresh()
driver.implicitly_wait(15)
folder = 'autoPolicy'+str(rand)
print folder
driver.find_element_by_xpath('//div[text()=folder]')
driver.find_element_by_xpath('//span[text()="Add Policy"]').click()
由于某种原因,我似乎无法获得 html,但这基本上就是我正在查看的内容
<tr class='x-grid-row' data-qtip'= 'Name'> .. </tr>
100 行这些,我想要的代码在其中之一内
<div class='x-grid-cell-inner- x-unselectable' ........>Name</div>
我没有任何好的方法来搜索这个元素,所以我使用直接 xpath。对于这 100 个 TR,它们基本上都是指向我正在测试的 Web 应用程序上的模块的链接。我的代码使树全部展开,在此期间,我有 webdriverwait 等待我要单击的模块。视觉上它几乎立即加载,因此很难说元素在定位之前超时。