如何使用Selenium在页面中的多个子选项卡中传递驱动程序实例?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用Selenium在页面中的多个子选项卡中传递驱动程序实例?相关的知识,希望对你有一定的参考价值。
我是Salesforce的新手。我正在尝试在Salesforce页面(Lightning Experience)中进行自动化。我现在正在工作的页面有以下设计,
- 搜索框位于页面顶部
- 搜索结果作为同一页面中的子选项卡
如何将驱动程序实例传递到同一页面的当前显示的子选项卡?
目前,当我尝试访问新打开的子选项卡的页面元素时,它会抛出异常,因为驱动程序仍然保持第一个打开的选项卡并获取其元素。
答案
您必须从Search Class返回SearchResultTab类对象,该对象初始化子选项卡的元素。试试下面的代码。请阅读在Search类中编写注释的代码。
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();
}
}
以上是关于如何使用Selenium在页面中的多个子选项卡中传递驱动程序实例?的主要内容,如果未能解决你的问题,请参考以下文章
如何在每个操作栏选项卡中维护多个Fragment堆栈或多个子片段
如何使用 Selenium WebDriver 打开一个新选项卡并启动链接?
未知错误:由于未知错误导致页面崩溃,会话被删除:无法从 ChromeDriver Selenium 崩溃的选项卡中确定加载状态