我試圖讓腳本確定一個元素(在這種情況下是電子郵件輸入空間)是否存在。驅動程式在正確的位置,因為它將密鑰發送到正確的位置,但它不會滿足if如下所示的條件。我也嘗試用try/except陳述句和find_elements()方法來做到這一點。沒有任何作用。未檢測到元素我收到Timeout錯誤可能是因為該expected_condition陳述句。如果有幫助,新打開的 Chrome 選項卡是 Microsoft 登錄頁面。
我的代碼:
def check_need_to_sign_in():
new_tab = driver.window_handles
driver.switch_to.window(str(new_tab[-1]))
print(driver.current_url)
element_present = EC.presence_of_element_located((By.XPATH, "//input[@class='form-control ltr_override input ext-input text-box ext-text-box']")) # WON'T DETECT ELEMENT):
WebDriverWait(driver, timeout).until(element_present)
if driver.find_elements(By.CSS_SELECTOR, "input.form-control ltr_override input ext-input text-box ext-text-box"): # WON'T DETECT ELEMENT)
print("Element exists")
sign_in()
else:
print("Element does not exist")
uj5u.com熱心網友回復:
首先driver.switch_to.window(str(new_tab[-1]))不是在window_handles之間切換的理想方式。相反,您需要使用List Comprehension來定位新視窗,如下所示:
window_before = driver.current_window_handle
print("First Window Handle is : %s" %window_before)
driver.execute_script("window.open('','_blank');")
WebDriverWait(driver, 10).until(EC.number_of_windows_to_be(2))
windows_after = driver.window_handles
new_window = [x for x in windows_after if x != window_before][0]
driver.switch_to.window(new_window)
現在,根據XPath和/或CssSelector,您似乎正在探測<input>具有表單控制元件和文本框類名的元素,并且它可能是一個可點擊的元素。在這種情況下,而不是presence_of_element_located()你需要引起WebDriverWait的element_to_be_clickable(),你可以使用以下的定位策略:
try:
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//input[@class='form-control ltr_override input ext-input text-box ext-text-box']")))
print("Clickable element was found")
except TimeoutException:
print("Clickable element wasn't found")
uj5u.com熱心網友回復:
該find_elements方法沒有回傳型別,因為boolean這就是您的if條件不起作用的原因。它的回傳型別是List. 如果未找到該元素,則它將回傳List大小為0after TimeOut。從檔案來看,
只要找到的集合中有 0 個以上的專案,此方法將立即回傳,或者如果
timeout達到則回傳一個空串列。@see org.openqa.selenium.WebDriver.Timeouts
你可以像下面這樣,
elements = driver.find_elements(By.CSS_SELECTOR, "input.form-control ltr_override input ext-input text-box ext-text-box")
if elements.size > 0 :
print("Element exists")
sign_in()
else:
print("Element does not exist")
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/366536.html
