【问题标题】:How to find a css element on the page if it is display: none?如果页面显示:无,如何在页面上找到css元素?
【发布时间】:2017-08-02 01:01:24
【问题描述】:

我正在 Ruby 中运行自动化测试。

我正在尝试编写一个脚本,它使用display:none(仅在移动形式中可见)找到 id,然后单击它。

这是我的代码:

def open_menu
   page.find[:css, "a[id='mobile-nav-link']", visible: false].click
end

它给了我一个错误:

   Selenium::WebDriver::Error::InvalidSelectorError:
   invalid selector: No selector specified

【问题讨论】:

  • 你在使用 Capybara 吗?你确定方括号是正确的吗?快速搜索使用圆括号而不是方括号显示类似的代码。即page.find(:css, "a[id='mobile-nav-link']", visible: false).click
  • 谢谢!就是这么简单!
  • 太好了,很高兴有帮助!我已将其发布为答案。

标签: ruby selenium testing rspec


【解决方案1】:

快速搜索使用圆括号而不是方括号显示类似的代码。即:

def open_menu
   page.find(:css, "a[id='mobile-nav-link']", visible: false).click
end

【讨论】:

    【解决方案2】:

    Selenium 仅以用户的方式与元素交互。

    如果链接仅在移动设备中可见,我建议使用以下方法之一。

    1. 通过移动网址查看页面。

    2. 您可能能够使用 Ruby 的 javascript 执行来更新控件以使其可见,或者设置表明您正在通过移动设备查看页面的值。

    将控件更新为可见

    此链接讨论如何使用 javascript 执行将元素设置为可见:Selenium Webdriver - click on hidden elements

    此链接讨论如何使用 ruby​​ 的 javascript 执行:How to execute Javascript in Ruby written Webdriver test?

    将两者放在一起,你会得到这样的东西吗?

    def open_menu
        elem = page.find[:css, "a[id='mobile-nav-link']", visible: false]
        js = "arguments[0].style.height='auto' arguments[0].style.visibility='visible';"
        driver.execute_script(js , elem)
        page.find[:css, "a[id='mobile-nav-link']", visible: true].click
    end
    

    我对 Ruby 语法并不完全熟悉,所以我不保证它可以复制/粘贴。

    【讨论】:

    • 它在 page.find 上失败。给我一个错误:'Failure/Error: elem = page.find[:css, "a[id='mobile-nav-link']", visible : false] Selenium::WebDriver::Error::InvalidSelectorError: 无效选择器:没有指定选择器'
    猜你喜欢
    • 1970-01-01
    • 2020-02-10
    • 1970-01-01
    • 1970-01-01
    • 2023-04-11
    • 2019-03-10
    • 1970-01-01
    • 2018-05-02
    • 1970-01-01
    相关资源
    最近更新 更多