我使用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
请告知我如何为我的邮轮航行生成另一个身份证件。
答案 0 :(得分:0)
在失败的情况下再次选择相同元素的原因是您没有将cruiseSailing值重新分配给新的。
我可以想到两种方式:
为"中的"中的cruiseSailing分配一个新值。块。你可以在里面做一些事情"如果"块。
cruiseSailing = driver.findElement(By.id(" uxMiniFinderVoyageSelect_chzn_o _" + x));
再次调用Orignial方法,将cruiseSailing值设置为新值。
注意:如果您继续使用第二种方法,可能需要从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"));
如果这有助于你,请投票。谢谢:))