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

量角器脚本无法正常工作

范书
2023-03-14
问题内容

这正是我想要做的

我用表格打开一个页面,该表格包含有关用户的信息

我的getText()元素指示表中的用户数(例如“列表中的11个用户”)

我删除“列表中的用户”部分,并将字符串转换为整数,以便稍后在for循环中使用

我需要通过用户名(第9列)查找某些用户,并获取j数字,该数字是该用户信息所在的行数(这就是我被卡住的地方)

我转到j该行的第一列(该行将成为该特定用户的编辑按钮),然后单击它以验证用户类型

我尝试过的一个代码示例

it("Validation of ND account", function() {
    //login
    element(by.id("j_username")).sendKeys($usernameND);
    element(by.id("j_password")).sendKeys($passwordND);
    element(by.buttonText("Login")).click();
    //navigate to a page with list of users displayed in a table
    element(by.xpath('//a[@short-title="Users"]')).click();
    //narrow the search result by typing 'testuser'
    element(by.model("userList.searchBox.options.query")).sendKeys($usernameND);
    //the table has 11 results such as 'testuser', 'testuser1', 'testuser2'
    //I get text of element with text '11 users in list' to get just the number out of it
    element(by.xpath('//div[@viewid="userList"]//div[@class="results-count ng-binding"]')).getText().then(function(numberOfUsers) {
        numberOfUsers = Number(numberOfUsers.replace(" Users in list",""));
        // declare a variable which will be responsible for accessing to j row in a table
        var j=1
        //I search through 11 rows from the table for my username
        for (i=1; i<numberOfUsers; i++) {

            element(by.xpath("(//td[@data-field='username'])["+j+"]")).getText().then(function(username){

                if (username===$usernameND){
                    console.log("true");
                    console.log(j);
                    j++
                } else {
                    console.log("false");
                    j++
                }   
            }); 
        }   
    });     
});

这就是我得到的

true
1
true
2
true
3
true
4
true
5
true
6
true
7
true
8
true
9
true
10

因此它确实很重要,但是即使用户名不同也总是返回true(似乎每次都要检查第一行)。我尝试另一种方法

element(by.xpath('//div[@viewid="userList"]//div[@class="results-count ng-binding"]')).getText().then(function(numberOfUsers) {
    numberOfUsers = Number(numberOfUsers.replace(" Users in list",""));

    for (i=1; i<numberOfUsers; i++) {   
        element(by.xpath("(//td[@data-field='username'])["+i+"]")).getText().then(function(username){

            if (username===$usernameND){
                console.log("true");
                console.log(i);
            } else {
                console.log("false");
            }       
        });     
    }       
});

我懂了

true
11
false
false
false
false
false
false
false
false
false

现在,它访问每一行,看起来还不错,但是在第一行中,它返回数字11。这是怎么回事?如何解决?

PS我会给我在做什么的例子 页面的截图
,我想找到我的用户,并单击“编辑”与之相关联的按钮。我只需在第一列第六行中单击一个单元格即可。但是,如果要添加更多用户,我想使其可靠。为此,我需要搜索用户名列,记录该用户在表中所在的行号,然后导航到找到的行号第一列中的单元格。


问题答案:

对我来说,简单的方法是访问表中要查找的用户的tr,然后单击此行中的“编辑”按钮。两个例子

$username26="testuser26"
element.all(by.xpath('//trLocator')).first().element(by.xpath("//tr[.//td[@data-field='username' and text()="+$username26+"]]")).element(by.xpath(".//a[text()='Edit']")).click()

element(by.xpath("//td[@data-field='username' and text()='"+$username26+"']/..")).element(by.xpath(".//a[text()='Edit']")).click();

要理解的重要部分是第二个xpath中的一个点,表示当前节点。没有此点,“ //”字面意思是页面上的任何地方,而“ .//”则意味着从我已经选择的元素开始

现在这是很长的路,但这是我一直在寻找的逻辑

var tableRows = element.all(by.xpath('xpathTableRowsLocator')); //returns 11 rows
var mentricsLogo =  element(by.css('a.logo'));
var searchedUsername = "TESTUSER26";

//somehow the code didn't work by itself so I had to place it inside of random function whuch I didn't care about
mentricsLogo.isPresent().then(function(result) {
        return tableRows.filter(function(eachRow, index) {
//get text of the whole row and separate it by columns
            return eachRow.getText().then(function(text){
                text=text.split(" ")
// I get third element is username
                if (text[2]===searchedUsername){
                    var xpathIndex = Number(index)+1
                    element(by.xpath("//*[@id='user-list-content']/div[2]/div[2]/div[1]/div[2]/div[1]/table/tbody/tr["+xpathIndex+"]/td[1]/a")).click()
                }
            })
        });
});

我知道它看起来可能不合理,但没有其他对我有用。



 类似资料:
  • 我想在我的Parallela板启动时运行一个bash脚本,它有Ubuntu。我搜索了SO,在这里找到了说明: 在linux ubuntu下启动时自动运行程序 在Linux上启动时以编程方式运行 我的bash脚本是test。sh,只有一行: 1) 我尝试的第一种方法是添加到脚本的aboslute路径: 2) 我尝试的第二种方法是遵循上面公认的答案。 在这两种情况下,脚本都是在引导后执行的,并且有一个

  • 问题内容: 我正在尝试在Centos 6.6上将以下服务脚本用于apache jmeter。 service jmeter start和service jmeter stop正常运行,但是当我尝试重新启动service jmeter时,它正在停止Java实例,但由于认为jmeter已经在运行,因此没有再次启动它。 任何指针将不胜感激。 问题答案: 您没有在stop和start命令之间进行重置/更新

  • 计划程序的设置: 和@enableScheduling在类中使用@configuration。 问题是fixedDelay正确工作两次,然后在迭代之间暂停1.5分钟。我在计划注释中尝试过fixedRate或cron,但都没有帮助。 方法在调度任务中的工作时间为100ms,项目有足够的内存,但调度程序的工作速度很慢。

  • IM 创建一个 groovy 脚本,用于从 docker 容器执行 SQL 脚本。这是我要执行的命令 当我从终端执行它时,它是有效的,但是当我调用我的groovy脚本来执行那一行时,我得到一个mysql帮助,就像命令不正确一样。 这就是我从groovy执行命令的方式: 有人知道为什么结果不一样或者为什么命令无法识别吗?

  • 提取的文本:http://pastebin.com/BXFfMy0z 问题pdf:http://www.iwb.ch/media/Unternehmen/Dokumente/inserat_leiter_pm.pdf 如何从该pdf文件中提取正确的文本?

  • 问题内容: 因此,我的设置无法按我想要的方式工作。因此,每当我运行该程序时,它就会立即从0变为100。我尝试使用,任务,并尝试了,但没有任何尝试。 这是我的程序: @MadProgrammer这是我尝试做一名摆动工作人员并将每个名称写入文档并更新进度栏的尝试。该程序将达到86%左右并停止运行,永远不会创建完成的文档。该程序将创建一个空白文档。这是我首先创建的SwingWorker对象,这是两种方法