使用Selenium和Java从下拉列表中选择随机WebElement

时间:2016-07-06 14:12:32

标签: java selenium

我使用Selenium 2.0和Java自动化我们的应用程序。我想更清楚地了解如何通过为我的WebElement生成随机ID然后单击它来解决问题。 我的下拉列表中有一个元素列表,这些元素仅在结尾处有所不同:

driver.findElement(By.id(""uxMiniFinderVoyageSelect_chzn_o_1")
driver.findElement(By.id(""uxMiniFinderVoyageSelect_chzn_o_2")
driver.findElement(By.id(""uxMiniFinderVoyageSelect_chzn_o_3")
driver.findElement(By.id(""uxMiniFinderVoyageSelect_chzn_o_4")

等到250.

我做的是调用Random类,我在其中声明了1到250

范围内的随机变量
Random random = new Random();
    int x = random.nextInt(250) + 1;

现在我正在以这种方式搜索我的元素

private WebElement cruiseSailing = driver.findElement(By.id("uxMiniFinderVoyageSelect_chzn_o_" + x));

一切正常,并且按预期工作。我面临的问题是,从下拉列表中选择其中一些元素后,有时会出现错误消息。根据我的测试用例,我需要捕获此错误,捕获屏幕截图并从下拉列表中选择另一个元素。但是一旦我设置了cruiseSailing元素,它就会一遍又一遍地选择相同的元素。请参阅下面的代码示例:

    private WebElement cruiseSailingDropDown = driver.findElement(By.id(Some ID));
    private WebElement errorMessage = driver.findElement(By.xpath("some xpath expression"));
    private WebElement cruiseSailing = driver.findElement(By.id("uxMiniFinderVoyageSelect_chzn_o_" + x));


    cruiseSailingDropDown.click();
    cruiseSailing.click();
    Thread.sleep(2000);
    if(errorMessage .isDisplayed){
    System.out.printLn("Error message is displayed")
    cruiseSailingDropDown.click();
    cruiseSailing.click();
    }else{
    proceed further to the next step

请告知我如何为我的邮轮航行生成另一个身份证件。

1 个答案:

答案 0 :(得分:0)

在失败的情况下再次选择相同元素的原因是您没有将cruiseSailing值重新分配给新的。

我可以想到两种方式:

  1. 为"中的"中的cruiseSailing分配一个新值。块。你可以在里面做一些事情"如果"块。

    cruiseSailing = driver.findElement(By.id(" uxMiniFinderVoyageSelect_chzn_o _" + x));

  2. 再次调用Orignial方法,将cruiseSailing值设置为新值。

  3. 注意:如果您继续使用第二种方法,可能需要从If块中删除以下行。

    cruiseSailingDropDown.click();
    cruiseSailing.click();
    

    对于截屏,您可以创建一个方法并在内部调用If。

    截屏代码

    File scrFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
    
     // Now you can do whatever you need to do with it, for example copy somewhere
    FileUtils.copyFile(scrFile, new File("c:\\error\\screenshot.png"));
    

    如果这有助于你,请投票。谢谢:))