presence_of_element_located(locator):判断元素是否被加在DOM树里,并不代表该元素一定可见
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver=webdriver.Chrome()
driver.get("http://www.iciba.com/")
myDynamicElement='//*[@id="app"]/div/div[2]/div/h1'
try:
#查看10秒内是否出现该元素,如果元素10秒内出现就返回,否则抛出异常。
element=WebDriverWait(driver,10).until(
EC.presence_of_element_located((By.XPATH,myDynamicElement))
)
finally:
driver.quit()
最初执行的代码一开始是这样写:presence_of_element_located(By.ID,"su")
,这样相当于取到了3个参数(self, By.ID, "su")
而presence_of_element_located
类中__init__()
方法取的确实是2个参数(self, locator),其中locator调用的是一个tuple(元组)
该元组(By.ID,"su")
作为一个整体,对应相当于1个参数,加上类实例化代表自身的self参数,正好就是2个参数
因此,执行代码正确的写法为:presence_of_element_located((By.ID,"su"))
,即需要嵌套两层英文圆括号
element_to_be_selected(element):判断某个元素是否被选中,一般用在下拉列表
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time
driver = webdriver.Chrome()
driver.get("http://202.105.30.27/ILASOPAC/ReaderLogin.do")
driver.maximize_window()
# 设置明确等待
wait = WebDriverWait(driver, 20, 0.5)
#判断是否点击----记住我
element = wait.until(EC.element_to_be_selected((driver.find_element_by_xpath("html/body/section/div[3]/div/div[1]/form/ul/li[4]/input"))))
time.sleep(1)
driver.close()
element_selection_state_to_be(element):判断某个元素的选中状态是否符合预期
element_located_selection_state_to_be(locator):判断某个元素的选中状态是否符合预期,与上一个方法作用相同,只是上一个方法参数为定位后的元素,该方法接收的参数为定位。
import time
from selenium import webdriver
driver = webdriver.Chrome(r'D:\zhusc\chromedriver.exe')
driver.get("http://202.105.30.27/ILASOPAC/NTRdrLogin.do")
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver.maximize_window() #窗口最大化
#选框未被选中
def missSelect(str):
wait = WebDriverWait(driver,10)
wait.until(EC.element_selection_state_to_be(driver.find_element_by_xpath(str),False))
driver.find_element_by_xpath(str).click()
missSelect("/html/body/section/div[3]/div/div[1]/form/ul/li[4]/input")
time.sleep(2)
driver.quit()
text_to_be_present_in_element(locator,text):判断某个元素中的text是否包含预期的字符串
ID = "id"
XPATH = "xpath"
LINK_TEXT = "link text"
PARTIAL_LINK_TEXT = "partial link text"
NAME = "name"
TAG_NAME = "tag name"
CLASS_NAME = "class name"
CSS_SELECTOR = "css selector"
locator=("link text","确定")
text="确定"
try:
#查看10秒内是否出现该元素,如果元素10秒内出现就返回,否则抛出异常。
element=WebDriverWait(driver,10).until(
EC.text_to_be_present_in_element(locator,text)
)
finally:
driver.find_element_by_xpath("/html/body/div[69]/div[2]/div[3]/a").click()