簡體   English   中英

檢查python硒中是否存在元素

[英]Check If element exists in python selenium

以下是我的python硒代碼

def provideDetails(self, titleEleName, titleText, sbmtBtnName, dropdownOptn, dropdownName):

        self.ui.jobs.setJobTitleEleName(titleEleName, titleText)

        elem = self.ui.jobs.selectButton(dropdownName)

        if elem.is_displayed():
            self.ui.jobs.selectButton(dropdownName)
            self.ui.sleep(4)
            self.ui.jobs.selectAor(dropdownOptn)
        else:
            self.ui.jobs.selectAddAors(dropdownOptn)
            self.ui.sleep(4)

        self.ui.jobs.selectButton(sbmtBtnName)

我必須檢查“ elem”是否存在。 如果存在,則應發生“如果”條件,否則應發生“其他”條件。 我嘗試了這段代碼。 我得到了這個錯誤“屬性錯誤:無類型對象沒有屬性'is_displayed'。任何幫助將不勝感激。謝謝。

另外,是否有其他方法可以檢查元素是否存在,並執行if else命令

按照評論, selectButton將執行單擊操作,但不返回Web元素。 讓我用Java來解釋

WebElement e = driver.findElement(By.xpath("//elementPath"));

下面是e是網頁元素上,我可以點擊

 e.click();

或可以驗證元素是否顯示(如果有條件)

e.isDisplayed(); 

但是WebElement e = driver.findElement(By.xpath("//elementPath")).click(); 無效。 在Java中,一旦編寫,它就會向您顯示Eclipse之類的編輯器中的異常。 因此driver.findElement(By.xpath("//elementPath")).click(); 將不會返回到要檢查的元素是否顯示。

一個好的方法是使用顯式等待 期望檢查元素是否存在於頁面的DOM上並且可見。 可見性意味着不僅顯示元素,而且其高度和寬度都大於0。請看示例:

self.ui.jobs.setJobTitleEleName(titleEleName, titleText)
browser = webdriver.Chrome()
wait = WebDriverWait(browser, 5)

try:
    wait.until(EC.visibility_of_element_located((By.NAME, dropdownName)))
    self.ui.jobs.selectButton(dropdownName)
    self.ui.sleep(4)
    self.ui.jobs.selectAor(dropdownOptn)
except TimeoutException:
    self.ui.jobs.selectAddAors(dropdownOptn)
    self.ui.sleep(4)

self.ui.jobs.selectButton(sbmtBtnName)

使用if / else語句的解決方案:

def provideDetails(self, titleEleName, titleText, sbmtBtnName, dropdownOptn, dropdownName):
    self.ui.jobs.setJobTitleEleName(titleEleName, titleText)
    browser = webdriver.Chrome()
    wait = WebDriverWait(browser, 5)
    elem = wait.until(EC.visibility_of_any_elements_located((By.NAME, dropdownName))) # will return a list of elements

    if elem:
        self.ui.jobs.selectButton(dropdownName)
        self.ui.sleep(4)
        self.ui.jobs.selectAor(dropdownOptn)
    else:
        self.ui.jobs.selectAddAors(dropdownOptn)
        self.ui.sleep(4)

    self.ui.jobs.selectButton(sbmtBtnName)

期望檢查網頁上是否存在至少一個元素。 locator用於查找元素,找到后返回WebElement列表。

進口:

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM