我想基于字符串中的部分文本创建一个变量。该变量将用于同一测试规范
元素的位置如下:
.//*[@id='root']/div[2]/div/div[2]/div/section/div[1]/div[2]/div/h4
输出为:
“您的预订参考是:DBM039444。”
我需要检索DBM039444或生成的任何数字。
我尝试使用旧的Excel类型的Left()和Right(),但没有成功。
任何人都可以提供正确的代码
答案 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();