我正在开发仅适用于IE的应用程序。登录应用程序后,将打开一个新的新窗口,即主页。现在我的问题是我无法通过IE驱动程序找到主页中的任何元素。 不确定浏览器是否在上一个窗口中查找元素。
我的方法:
System.DirectoryServices.PropertyValueCollection
答案 0 :(得分:0)
我也遇到了类似的问题,无法获取定位器,但是定位器确实存在。在这里,我提出了可行的解决方案,只需尝试使用JavaScript定位Web元素。
获取定位器的替代方法,如果driver.findElement无法正常工作,请使用以下Java脚本
public WebElement getIsConvertedCheckBoxElement() {
JavascriptExecutor js = getDriver();
String script = "return document.getElementById('conversion');";
return (WebElement) js.executeScript(script);
}
答案 1 :(得分:0)
正如@JimEvans在评论中提到的那样,
尽管用于存储句柄列表的数据类型可以通过插入进行排序,但是WebDriver实现在窗口句柄上迭代以插入它们的顺序并不需要保持稳定。顺序是任意的。
因此,每次打开新标签页/窗口并最终遍历 window句柄时,我们必须诱使 WebDriverWait 然后收集 window句柄 和switchTo().window(newly_opened)
,如以下示例所示:
示例代码:
System.setProperty("webdriver.ie.driver", "C:\\Utility\\BrowserDrivers\\IEDriverServer.exe");
WebDriver driver = new InternetExplorerDriver();
driver.get("http://www.google.com");
String first_tab = driver.getWindowHandle();
System.out.println("Working on Google");
((JavascriptExecutor) driver).executeScript("window.open('http://facebook.com/');");
WebDriverWait wait = new WebDriverWait(driver,5);
wait.until(ExpectedConditions.numberOfWindowsToBe(2));
Set<String> s1 = driver.getWindowHandles();
Iterator<String> i1 = s1.iterator();
while(i1.hasNext())
{
String next_tab = i1.next();
if (!first_tab.equalsIgnoreCase(next_tab))
{
driver.switchTo().window(next_tab);
System.out.println("Working on Facebook");
}
}
控制台输出:
Working on Google
Working on Facebook
答案 2 :(得分:-1)
String beforeLogin = driver.getWindowHandle();
/*
* Perform Login
*/
ArrayList<String> windows = new ArrayList<String>(driver.getWindowHandles());
// Now switch to 2nd window
driver.switchTo.window(windows.get(1));
driver.findElement(By.xpath("//*[text()='Select']")).click();