【问题标题】:Invalid Selector error when attempt to select a date format from dropdown list尝试从下拉列表中选择日期格式时出现无效的选择器错误
【发布时间】:2014-05-06 16:12:32
【问题描述】:

对于我正在测试的应用程序,我希望从下拉列表中选择日期格式。日期格式是这样的:dd/mm/yyyy(这是下拉菜单中的值)

但是,当我尝试选择它时收到此错误: Selenium::WebDriver::Error::InvalidSelectorError:

有人知道如何从下拉列表中选择此值吗?将条目传递给我的测试时,我有单引号和双引号,但它不喜欢斜杠 (/)。

有人有什么想法吗?

html如下:

<option class="ng-scope ng-binding" value="YYYY-MM-DD" ng-repeat="fmt in date_formats"     ng-selected="false">

2014-05-06

</option>
<option class="ng-scope ng-binding" value="DD/MM/YYYY" ng-repeat="fmt in date_formats"  ng-selected="false">

06/05/2014

</option>

我的测试使用以下方法选择格式:

def select_date_format(format)
  page.find("[value=#{format}]").click
end

在上面的方法中,格式是一个变量,它是从我的规范文件中传递的,具有我希望选择的日期格式。此方法适用于破折号(即当日期格式为 YYYY-MM-DD 时),但当我尝试传入带有斜杠的值时出现错误(即 - DD/MM/YYYY)

谢谢!

【问题讨论】:

  • 共享具有此下拉列表和规范的视图部分。
  • 嗨 Pawel7318 - 我已经用 html 代码和我的测试代码编辑了原始问题。

标签: selenium rspec capybara


【解决方案1】:

例外是抱怨 CSS 选择器中的斜线。以下不被视为有效的 CSS 选择器:

[value=DD/MM/YYYY]

要在属性值中使用斜线,您需要将属性值括在引号中:

[value='DD/MM/YYYY']

如果您在选择器内添加引号,您的方法应该可以工作:

def select_date_format(format)
  page.find("[value='#{format}']").click
end

【讨论】:

    【解决方案2】:

    我在 Java 中检查了它,它可以工作:

    @Test
    public void test1() { 
        WebDriver driver = new FirefoxDriver();
        driver.get("test.html");
        Thread.sleep(3000);
    
        driver.findElement(By.xpath("//option[@value='DD/MM/YYYY']")).click();
    
        String dateFormat = "DD/MM/YYYY";
        driver.findElement(By.xpath("//option[@value='" + dateFormat + "']")).click(); 
    
        driver.close();
    }
    

    或者你可以使用 Select :

    Select select = new Select(driver.findElement(By.xpath("//path_to_drop_down")));
    select.deselectAll();
    select.selectByVisibleText("DD/MM/YYYY");
    

    (http://selenium.googlecode.com/git/docs/api/java/org/openqa/selenium/support/ui/Select.html)

    【讨论】:

    • 感谢您的建议 Silverado。我选择了上面贾斯汀提供的解决方案,因为它只是插入 2 个引用的问题,但感谢您花时间写出详细的答案!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-07-28
    • 2013-06-20
    • 2020-03-30
    • 1970-01-01
    • 2015-10-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多