检查元素是否存在

Tha*_*anh 7 ruby selenium webdriver

无论如何检查Selenium Web驱动程序中是否存在元素?我尝试使用此代码:

if @driver.find_element(:link, "Save").displayed? == true
Run Code Online (Sandbox Code Playgroud)

但它会在异常中中断,这不是我的预期,因为我仍然希望脚本继续运行.

Igo*_*rol 12

我不是Ruby专家,可以做一些语法错误,但你可以得到一般的想法:

if @driver.find_elements(:link, "Save").size() > 0
Run Code Online (Sandbox Code Playgroud)

这段代码不会抛出 NoSuchElementException

但是如果你有implicitlyWait大于零并且页面上没有元素,这个方法将"挂起"一段时间.第二个问题 - 如果元素存在于页面上但未显示,则会得到true.

要解决此问题,请尝试创建方法:

def is_element_present(how, what)
    @driver.manage.timeouts.implicit_wait = 0
    result = @driver.find_elements(how, what).size() > 0
    if result
        result = @driver.find_element(how, what).displayed?
    end
    @driver.manage.timeouts.implicit_wait = 30
    return result
end
Run Code Online (Sandbox Code Playgroud)


Abh*_*hra 6

@driver.find_element抛出一个叫做的异常NoSuchElementError.

因此,您可以编写自己的方法,该方法使用try catch块,并在没有异常时返回true,在有异常时返回false.