修剪文本值以将临时存储作为变量

时间:2019-06-17 14:47:22

标签: selenium protractor

我想基于字符串中的部分文本创建一个变量。该变量将用于同一测试规范

元素的位置如下:

 .//*[@id='root']/div[2]/div/div[2]/div/section/div[1]/div[2]/div/h4

输出为:

“您的预订参考是:DBM039444。”

我需要检索DBM039444或生成的任何数字。

我尝试使用旧的Excel类型的Left()和Right(),但没有成功。

任何人都可以提供正确的代码

3 个答案:

答案 0 :(得分:0)

您可以为此使用split并在首次出现“:”时将字符串分开,该字符串应始终紧接在预订参考号之前

异步/等待

let eleText = await element(by.xpath(".//*[@id='root']/div[2]/div/div[2]/div/section/div[1]/div[2]/div/h4")).getText();

//splits the string when it finds ": " which should occur only once
let bookingRef = eleText.split(": ")[1];
console.log(bookingRef)

控制流

element(by.xpath(".//*[@id='root']/div[2]/div/div[2]/div/section/div[1]/div[2]/div/h4"))
    .getText().then(eleTxt => {
        let bookingRef = eleText.split(": ")[1];
        console.log(bookingRef)
})

答案 1 :(得分:0)

如果您事先知道它将是'DBM'后跟数字,则可以检索整个字符串,然后执行string.replace(/\D/g, ''); <-仅返回数字。

答案 2 :(得分:0)

这是一个非常不灵活的选择器(.//*[@id='root']/div[2]/div/div[2]/div/section/div[1]/div[2]/div/h)。更动态地查找此标签,这样,如果被测页面发生变化,就不必修复此标签。另外,以下更改将为您提供替代答案。

由于您的帖子没有提及您的测试所用的编程语言,因此我将用C#编写此答案:

using OpenQA.Selenium.Support.Extensions;
...
string javascriptCommand = @"
    var text = 'Your booking reference is:';
    var result = $(`h4:contains('${text}')`).text();
    return result.replace(text, '');
";
string referenceId = driver.ExecuteJavascript<string>(javascriptCommand).Trim();