当前位置: 首页 > 面试题库 >

具有链接选择的CasperJs和Jquery

艾英范
2023-03-14
问题内容

我正在尝试为一个网站创建一个测试用例,其中包括带有3个链式选择的表单。加载网页时,默认情况下会填充第一选择。如果从第一个选择中选择了任何选项,则通过ajax调用填充第二个选择。以同样的方式,当在第二个选择项上选择一个选项时,则通过ajax调用填充第三个选择项。最后,在第三个选择上选择一个选项时,将在html表中填充我需要验证的信息。

三个相互关联的选择具有此结构

<select id="s1" name="s1"> 
 <option value="1">Option1</option>
 <option value="2">Option2</option>
 <option value="3">Option3</option>
</select>

 <select id="s2" name="s2"></select>

 <select id="s3" name="s3"></select>

我肯定知道该网站使用Jquery来进行ajax调用。有人知道用casperJs创建这种情况的干净方法吗?


问题答案:

这是我的方法。因为Web上下文包含jQuery,所以我们可以使用它来触发事件,并且重要的一步是,在每个ajax调用之后,我们必须等待并验证,然后才能处理任何下一步。

//set select values
var optionFirstSelect  = 125;
var optionSecondSelect = 6;    
var optionThirdSelect  = 47;

//create casper object
var casper = require('casper').create({
    loadImages:false,
    verbose: true,
    logLevel: 'debug'
});

//open url
casper.start('http://thewebsite.com');

casper.then(function(){

    //select option on first select
    this.evaluate(function(valueOptionSelect){
        $('select#s1').val(valueOptionSelect);
        $('select#s1').trigger('change');
    },optionFirstSelect);

    //wait until the second select is populated
    this.waitFor(function check() {
        return this.evaluate(function() {
            return document.querySelectorAll('select#s2 option').length > 1;
        });
    }, function then() {

            //select option on second select
            this.evaluate(function(valueOptionSelect){
                $('select#s2').val(valueOptionSelect);
                $('select#s2').trigger('change');
            },optionSecondSelect);

            //wait until the third select is populated        
            this.waitFor(function check() {
                return this.evaluate(function() {
                    return document.querySelectorAll('select#s3 option').length > 1;
                });
            }, function then() {

                    //select option on third select
                    this.evaluate(function(valueOptionSelect){
                        $('select#s3').val(valueOptionSelect);
                        $('select#s3').trigger('change');
                    },optionThirdSelect);

                    //wait until table with info is populated after an option is seleted on third select. 
                    this.waitFor(function check() {
                                return this.evaluate(function() {
                                    return  document.querySelectorAll('table#info tbody tr').length > 1;
                                });
                            }, function then() {

                            //Do verifications here ...
                    });               
            });         
    }); 
});

casper.run(function() {
    //finish execution script 
    this.exit();
});


 类似资料:
  • 我是jQuery/js的新手,遇到了这样的问题:您可以运行我的代码,发现计数不正确: null null 我的HTML必须保持不变,我必须找到一些方法使jQuery在本例中工作,并且保持HTML结构不变。如果您对如何解决此问题有任何想法,请随时发表评论或分享代码想法。 我感谢您的帮助!

  • 伪类选择器,就是基于元素当前所处的状态来选取元素。由于状态通常是动态变化的,当元素处于一个特定状态时,它可能得到一个伪类的样式;当状态改变时,它又会失去这个样式。由此可知,它是基于文档之外的抽象,所以称作伪类。 伪类选择器是CSS 中已经定义好的选择器,不能由用户随便起名,只能按CSS规定的标准格式进行使用。其语法为: 选择器:伪类名 { 属性: 值 } 链接伪类选择器 在CSS中,最常用的伪类选

  • 选择图层 可以选择一个或多个图层以便在上面工作。对于某些活动(如绘画以及调整颜色和色调),您一次只能在一个图层上工作。单个选定的图层称为现用图层。现用图层的名称将出现在文档窗口的标题栏中。 对于其它活动(如移动、对齐、变换或应用“样式”面板中的样式),您可以一次选择并处理多个图层。您可以在“图层”面板中选择图层或使用“移动”工具 。 您也可以链接图层。与同时选定的多个图层不同,当您在“图层”面板中

  • 问题内容: django-smart-selects是一个优雅的解决方案,它使Django开发人员能够在其表单中链接选择输入。但是,正如开发人员在其问题清单中所报告的那样,在表单集中使用它时效果不佳。 它呈现的JavaScript与模型定义中“已链接字段”的ID绑定在一起。 当您在表单集中使用它时,您如何看待它如何工作?我认为小部件的渲染方法(请参阅django-smart- selects代码)

  • 我最近一直在通读Geb的书,并试图掌握它,因为它似乎是一个伟大的工具。我觉得我已经到了那里,但仍然有一些真正的核心概念,我似乎无法理解。 谢谢!

  • 问题内容: 在MySQL中,我有此查询 日期格式 我只选择 2012年1月以后 的书籍。我尝试使用,但这不起作用。 有任何想法吗? 问题答案: 使用功能 或使用和功能 或使用功能 或使用和运算符 看到这个SQLFiddle