我正在尝试使用Selenium Webdriver(Java)自动化应用程序。我的Web应用程序有一个Add按钮。单击添加按钮后,将启用下拉列表。如果再次单击,将启用第二个下拉列表。每个后续下拉列表的ID都是page1,page2,page3 ..等等..
我想要做的是当我打开页面时,我需要查看页面中是否有任何下拉列表,如果是,则选择下一个下拉列表值,然后从下拉列表中选择一个值。 / p>
这是我当前的代码,我手动选择每个下拉列表并选择它们各自的值。:
driver.findElement(By.id("addPage")).click();
new Select(driver.findElement(By.id("page0"))).selectByVisibleText("ABCD");
driver.findElement(By.id("addPage")).click();
Thread.sleep(1000);
new Select(driver.findElement(By.id("page1"))).selectByVisibleText("CDEF");
driver.findElement(By.id("addPage")).click();
Thread.sleep(1000);
new Select(driver.findElement(By.id("page2"))).selectByVisibleText("EFGH");
driver.findElement(By.id("addContact")).click();
答案 0 :(得分:2)
我会尝试按照以下方式做一些事情,假设你的页面中没有其他下拉元素(我从你的问题中假设是这种情况)。
private EventWaitHandle _waitOnTwo = new EventWaitHandle(false, EventResetMode.AutoReset);
public void PhaseTwo()
{
try
{
string phaseTwoDir = "C:\\PhaseTwo";
string phaseThreeDir = "C:\\PhaseThree";
Action<string> processFiles = new Action<string>((file) => { File.Move(file, Path.Combine(phaseThreeDir, Path.GetFileName(file))); _waitOnTwo.Set(); });
Func<bool> continueCondition = new Func<bool>(() => { return (Directory.GetFiles(phaseTwoDir).Count() > 0 || _waitOnOne.WaitOne(60000)); });
// process files
Process(phaseTwoDir, processFiles, continueCondition);
}
finally
{
_waitOnTwo.Set();
}
}
private void Process(string directory, Action<string> processFileWork, Func<bool> continueCondition)
{
while (continueCondition())
{
foreach (string file in System.IO.Directory.GetFiles(directory))
{
// if canceled, throw
_cts.Token.ThrowIfCancellationRequested();
// process file
processFileWork(file);
}
}
}
您可以尝试使用页面上每个选择元素的ID填充数组,并搜索与模式匹配的数组&#34; page \ d&#34;从那里开始
答案 1 :(得分:1)
我认为您可以找到id
以page
开头的任何选择元素,获取id
属性值,然后点击下一页的下拉菜单。示例实施:
WebElement existingPage = driver.findElement(By.cssSelector("select[id^=page]"));
String nextPageID = Integer.toString(Integer.parseInt(existingPage.getAttribute("id").replaceAll("\\D+", "")) + 1);
Select nextPage = new Select(driver.findElement(By.id("page" + nextPageID)));
并且,正如@Iridann正确指出的那样,要检查状态,请捕获NoSuchElementException
异常:
try {
WebElement existingPage = driver.findElement(By.cssSelector("select[id^=page]"));
// ...
} catch (NoSuchElementException e) {
// no pages found
}