检查python硒中是否存在元素

时间:2018-07-24 07:19:40

标签: python-3.x selenium if-statement xpath ui-automation

以下是我的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命令

2 个答案:

答案 0 :(得分:0)

根据评论,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();将不会返回到要显示的元素。

答案 1 :(得分:0)

一个好方法是使用explicit wait。期望检查元素是否存在于页面的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)

期望检查网页上是否存在至少一个可见元素。定位器用于查找元素,找到后返回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