【问题标题】:How to answer Pin code with selenium c#如何用 selenium c# 回答 Pin 码
【发布时间】:2018-08-23 04:06:01
【问题描述】:

对 C# 中的编程/硒自动化非常陌生,遇到了一些我正在努力解决的绊脚石,我在这里/谷歌上四处寻找,但没有找到与我正在寻找的东西相匹配的东西,我可以我的问题措辞略有错误,如果是这样,请原谅我。

我需要达到的目标, 在输入用户名/密码后登录网站时,系统会提示我们输入 PIN 码,特别是随机生成的组合 - 例如“请输入您的 PIN 的数字 1、2 和 3” - 其中(在示例中)1、2 , 3 可以是从 1 到 6 的任何值(始终按时间顺序),消息本身、“,”和“&”的位置不会改变——只有数字。

** 包含消息(和数字)的“行”中的信息 **

内部 HTML

请输入您的 PIN 码 135

外部 HTML

请输入您的 PIN 码 135

CSS 选择器 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


【解决方案1】:

在挑战字符串的情况下

string pinRequest = "Please enter pin digits 1,4 & 8 of your pin.";

var pinNums = pinRequest.Where(Char.IsDigit).ToArray().ToList();

pinNums 将是一个整数数组,包含 3 个部分,它们等于 {1,4,8}

然后您的密码挑战通过以下方式解决:

string part1 = fullWord.ToArray()[pinNums[0] - 1].ToString();
string part2 = fullWord.ToArray()[pinNums[1] - 1].ToString();
string part3 = fullWord.ToArray()[pinNums[2] - 1].ToString();

其中 fullWord 可能是 123123 或 Password123 之类的东西

我不太确定此代码将如何处理 >= 10 位长度的密码挑战。

【讨论】:

    【解决方案2】:

    输入:你需要抓取一个包含“整数和字母”的字符串并只返回整数。

    这是我使用 Selenium,Java 完成的示例。 请将您的 URL 和 WebElement 更改为抓取。

    driver.get("https://en.wikipedia.org/wiki/Main_Page");
    
        WebElement option = driver.findElement(By.xpath("//*[@id=\"articlecount\"]"));
        String word=option.getText();
        //here you get - 5,589,206 articles in English
        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);
             }
         }
    

    基本上,这会打印您拥有整数的索引。使用它们

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-11
      • 2014-05-24
      • 2023-01-16
      • 2020-02-01
      相关资源
      最近更新 更多