Java 如何使用Selenium跨页面中的多个子选项卡传递驱动程序实例?
我是Salesforce的新手。我正在尝试在Salesforce页面中实现自动化(闪电体验)。我现在工作的页面有以下设计Java 如何使用Selenium跨页面中的多个子选项卡传递驱动程序实例?,java,selenium,salesforce,Java,Selenium,Salesforce,我是Salesforce的新手。我正在尝试在Salesforce页面中实现自动化(闪电体验)。我现在工作的页面有以下设计 页面顶部的搜索框 搜索结果作为同一页面中的子选项卡 如何将驱动程序实例传递到同一页面当前显示的子选项卡 目前,当我试图访问新打开的子选项卡的页面元素时,它抛出异常,因为驱动程序仍然保留着第一个打开的选项卡并获取其元素 必须从初始化子选项卡元素的搜索类返回SearchResultTab类对象。试试下面的代码。请阅读在搜索类中编写注释的代码 public class Search
目前,当我试图访问新打开的子选项卡的页面元素时,它抛出异常,因为驱动程序仍然保留着第一个打开的选项卡并获取其元素 必须从初始化子选项卡元素的搜索类返回SearchResultTab类对象。试试下面的代码。请阅读在搜索类中编写注释的代码
public class Search {
private WebDriver driver;
@FindBy(css=".LM6RPg")
private WebElement searchTextBox;
@FindBy(css = ".vh79eN")
private WebElement searchButton;
public Search(WebDriver driver) {
this.driver = driver;
PageFactory.initElements(driver, this);
}
// A method which initializes tab page on submitting search page
public SearchResults searchInStore(String query) {
searchTextBox.sendKeys(query + Keys.SPACE);
searchButton.click();
return new SearchTab(driver, query);
}
}
public class SearchTab {
@FindBy(css="._1ZODb3")
public WebElement tabElement1;
@FindBy(how = How.XPATH, using = "//div[@class='_3wU53n']")
public List<WebElement> tabElement2;
public SearchResults(WebDriver driver, String query) {
this.driver = driver;
PageFactory.initElements(driver, this);
wait = new WebDriverWait(this.driver,2000);
}
}
public class SearchTabTest{
@Test
public void testProductSearch() {
Search search = new Search(Browser.driver);
SearchResults searchResults = search.Search().searchInStore("iphone 5s");
searchResults.tabElement1.getText();
searchResults.tabElement2.getText();
}
}
public class Browser {
private static WebDriver driver;
public static WebDriver driver() {
System.setProperty("webdriver.chrome.driver", "./resources/browserdrivers/chromedriver.exe");
DesiredCapabilities caps = DesiredCapabilities.chrome();
ChromeOptions options = new ChromeOptions();
options.addArguments("--disable-extensions");
caps.setCapability(ChromeOptions.CAPABILITY, options);
driver = new ChromeDriver(caps);
driver.manage().window().maximize();
return driver;
}
public static void open(String url) {
driver.get(url);
}
public static void close() {
driver.quit();
}
}
公共类搜索{
私有网络驱动程序;
@FindBy(css=“.LM6RPg”)
私有WebElement搜索文本框;
@FindBy(css=“.vh79eN”)
私有WebElement搜索按钮;
公共搜索(网络驱动程序){
this.driver=driver;
PageFactory.initElements(驱动程序,this);
}
//在提交搜索页面上初始化选项卡页面的方法
公共搜索结果searchInStore(字符串查询){
searchTextBox.sendKeys(query+Keys.SPACE);
搜索按钮。单击();
返回新的SearchTab(驱动程序、查询);
}
}
公共类搜索选项卡{
@FindBy(css=“.u1zodb3”)
公共WebElement选项卡元素1;
@FindBy(how=how.XPATH,使用=“//div[@class=”'''u 3wU53n']))
公共列表选项卡元素2;
公共搜索结果(WebDriver驱动程序、字符串查询){
this.driver=driver;
PageFactory.initElements(驱动程序,this);
wait=newwebdriverwait(this.driver,2000);
}
}
公共类搜索测试{
@试验
public void testProductSearch(){
搜索=新搜索(Browser.driver);
SearchResults SearchResults=search.search().searchInStore(“iphone 5s”);
searchResults.tabElement1.getText();
searchResults.tabElement2.getText();
}
}
公共类浏览器{
私有静态WebDriver;
公共静态WebDriver()驱动程序{
System.setProperty(“webdriver.chrome.driver”,”/resources/browserdrivers/chromedriver.exe);
DesiredCapabilities=DesiredCapabilities.chrome();
ChromeOptions选项=新的ChromeOptions();
options.addArguments(“--disable extensions”);
caps.setCapability(ChromeOptions.CAPABILITY,选项);
驱动器=新的镀铬驱动器(caps);
driver.manage().window().maximize();
返回驱动器;
}
公共静态无效打开(字符串url){
获取(url);
}
公共静态无效关闭(){
driver.quit();
}
}
我在脚本文件SearchResults SearchResults=agentcare.searchInStore(“XXXX”)中添加了这一行;并具有搜索方法publicsearchresults searchInStore(字符串查询){driver.findelee(By.xpath(searchsaleforce)).sendKeys(query);driver.findelee(By.xpath(searchsaleforce)).sendKeys(key.RETURN);RETURN new SearchResults(driver,query);}并在搜索结果中将我的制表符对象定义为@FindBy(xpath=“//div[contains(@title,'XXXX')]/a”)公共WebElement登录用户;公共搜索结果(WebDriver驱动程序,字符串查询){/}。但无法在脚本中获取LoginUser。请澄清为什么在此步骤后我无法在脚本中获取LoginUser元素。?您必须在逻辑上安排从一个页面类到另一个页面类的方法链,以便访问登录元素。您应该具有类似loginPage.homePage.SearchPage.SearchPageTabResults()的方法;这些是完整示例页面-测试-Amit的链接,搜索文本将打开一个页面,我将登录到该帐户。因此我相信它们是按逻辑排列的。这意味着在搜索框中输入文本并单击“提交”按钮后,应返回LoginPage类对象,登录后将返回SearchResultTab类的obj。