相关疑难解决方法(0)

Selenium waitForElement

如何为Selenium编写函数以等待Python中只有类标识符的表?我有一个学习使用Selenium的Python webdriver功能的魔鬼.

python automation automated-tests selenium-webdriver

42
推荐指数
3
解决办法
9万
查看次数

Selenium等到两个元素中的一个存在

很多时候我希望webdriver等待两个元素之一的存在.通常情况下,当我期望页面在某些情况下显示element1或元素2时会发生这种情况.目前我正在使用两个等待顺序执行此操作,但由于我需要等待2次,因此效率很低.有没有办法把两个等待合二为一?换句话说,我想等到element1或element2出现.

try: 
  element = WebDriverWait(self.browser, 15).until(EC.presence_of_element_located((By.ID, "elem1")))
  element.click()
  return "elem1"
except: 
  print "failed to find elem1"

try: 
  element = WebDriverWait(self.browser, 5).until(EC.presence_of_element_located((By.ID, "elem2")))  
  return "elem2"    
except:
  print "sth wrong!"
  raise  Exception("Sth Wrong!") 

return "Should not get here"      
Run Code Online (Sandbox Code Playgroud)

selenium selenium-webdriver

8
推荐指数
3
解决办法
4655
查看次数

Selenium 等待两个条件中的任何一个出现

我在 Python 中有一个 Selenium 脚本。我尝试访问的网页将具有以下两种可能结果之一:

  1. 要么,它不会有所需的数据,在这种情况下,它会打印出某个文本(例如,“找不到数据”)
  2. 或者,它将拥有所需的数据并将其加载到我可以通过 ID 访问的元素中(例如,“dataID”)

我需要等待这些条件中的任何一个为真。如果满足这些条件中的任何一个,我将简单地提取页面源并退出。

我可以分别等待这些条件如下:

element1 = WebDriverWait(driver, 10).until(EC.text_to_be_present_in_element((By.ID, "nodataID"), "data not found"))
if element1:
    content = driver.page_source.encode('utf-8')
    driver.quit()

element2 = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "dataID")))
if element2:
    content = driver.page_source.encode('utf-8')
    driver.quit()
Run Code Online (Sandbox Code Playgroud)

这意味着 Selenium 将首先等待查看网页是否没有所需的数据。在这种情况下,它将获取页面源并退出。但是如果不满足这个条件,那么它会再继续等待 10 秒,看看是否满足第二个条件。

这种方法的问题是我不确定第一个条件(如果为真)是否会在 10 秒内得到满足。也就是说,我可能会等待 10 秒,如果不满足第一个条件,那么我将移动一个以寻找第二个条件。但也有可能是第一个条件真的成立,在第 11 秒就实现了。在这种情况下,我的脚本永远不会知道第一个条件已实现。如果我切换两个等待语句的顺序,那么问题仍然存在,因为现在我仍然不确定等待新的第一个条件成立需要多长时间。

这种方法的另一个问题是,即使第二个条件实际上只在 2-3 秒内满足,它也会等待 10 秒来满足第一个条件。因此,当网页的第二个条件为真时,就会浪费等待时间。

所以,我需要能够编写一个等待两个条件之一为真的等待。

我查看了其他几个 Stackoverflow 问题并试图提出解决方案,但我无法解决。我尝试将 2 个条件与逗号 (,) 或 || 结合使用 或 OR 关键字。但这些都不能解决问题。

有人可以指出我正确的方向吗?

python selenium

6
推荐指数
1
解决办法
2768
查看次数