【发布时间】:2018-08-23 04:06:01
【问题描述】:
对 C# 中的编程/硒自动化非常陌生,遇到了一些我正在努力解决的绊脚石,我在这里/谷歌上四处寻找,但没有找到与我正在寻找的东西相匹配的东西,我可以我的问题措辞略有错误,如果是这样,请原谅我。
我需要达到的目标, 在输入用户名/密码后登录网站时,系统会提示我们输入 PIN 码,特别是随机生成的组合 - 例如“请输入您的 PIN 的数字 1、2 和 3” - 其中(在示例中)1、2 , 3 可以是从 1 到 6 的任何值(始终按时间顺序),消息本身、“,”和“&”的位置不会改变——只有数字。
** 包含消息(和数字)的“行”中的信息 **
内部 HTML
请输入您的 PIN 码 1、3 和 5
外部 HTML
请输入您的 PIN 码 1、3 和 5CSS 选择器 h2.login-desktop-only
xPath /html/body/section[2]/div/div/div/form/div/div[2]/div[1]/div/h2
对于这种情况,我使用的是“UAT 站点”,因此我可以控制 PIN,假设它始终是 123456 – 所以 1 = 1、2 =2、3-3 等等。我无法确定每次运行测试时会询问哪些数字。
我如何从“请输入数字 XXXXX”中“抓取”文本并解析(我认为这是正确的词)数据以分隔“抓取”的数字,然后再使用该数据匹配前声明'1 = 1'等然后最终在键盘上选择正确的数字?
我想这将需要一个 IF 语句列表,但我仍然不知道如何抓取/存储请求的数字。理想情况下,希望使用 c# 来保留它(但是,如果存在任何 Java 示例,我可以使用它,因为同事正在使用 java selenium - 我们俩对此都很陌生)
任何建议将不胜感激。
(EDIT TO Add code from comment)
非常感谢您回复我,我尝试了该代码,它找到了包含在该“字符串”中的整数的索引位置。目前它“打印”出索引位置,但我怎样才能得到它来给出值而不是打印它? 我想如果我可以将它分配给一个变量,我可以将三个数字拆分为一个唯一变量,该变量具有 IF 语句以覆盖 IF 1 - 然后 1 IF 2 - 然后 2 等等。如果这有意义吗?
public class Some_Class {
public static void main(String[] args) {
WebDriver driver = new SafariDriver();
driver.get("SomeWebsite");
driver.findElement(By.id("username")).sendKeys("XXXXXXX");
driver.findElement(By.id("password")).sendKeys("XXXXXXX ");
driver.findElement(By.id("login-button")).click();
/* --- This was my original plan to set the xpath as a string and then replace all with numbers only. This did not work as I thought.
{
WebElement str = driver.findElement(By.xpath("/html/body/section[2]/div/div/div/form/div/div[2]/div[1]/div/h2"));
String numberOnly = str.replaceAll("[^0-9]", "");
}
*/
WebElement option = driver.findElement(By.xpath("/html/body/section[2]/div/div/div/form/div/div[2]/div[1]/div/h2"));
String word=option.getText();
String check[]=word.split("");
for(int i=0; i<check.length ; i++)
{
if( Pattern.matches("\\d", check[i]))
{
System.out.println("found integer at i = "+ i);
}
}
}
}
【问题讨论】:
-
目前我有,在 i = 21 处找到整数 在 i = 24 处找到整数 在 i = 28 处找到整数
标签: c# html selenium automation