我试图复制在新标签中打开的URL,但复制旧标签的URL.如何复制新标签url java selenium



如何复制新的选项卡url java selenium?

'package TestCases;
public class Learn_TC3 extends SuperTestScript
{
@Test
public void  LoginTC1() throws Exception
{
//all the required data

String USRID = ExcelLibrary.readData("Sheet1", 0, 0);
String PSW = ExcelLibrary.readData("Sheet1", 0, 1);


//create page objects
LearnPage Lp = new LearnPage();
Tabswitch Ts = new Tabswitch();

//invoke the methods
Lp.ClickonMaterialsButton();
Thread.sleep(3000);
Lp.ClickonPDF1();//By clicking on pdf. Pdf opens in new tab
String CurrentUrl = driver.getCurrentUrl();// to Fetch new url
ExcelLibrary.writeData("Sheet1", 0, 4, CurrentUrl);//write url to excel sheet?
Ts.switchToPreviousTabAndClose();   //Closing new tab
}
}'

我试图复制在新标签中打开的URL,但复制旧标签的URL。如何复制新标签url java selenium?

单击打开新选项卡的Lp.ClickonPDF1()后,您必须将Selenium驱动程序切换到打开的选项卡才能在那里执行操作
所以你的代码可以是这样的:

Lp.ClickonMaterialsButton();
Thread.sleep(3000);
Lp.ClickonPDF1();//By clicking on pdf. Pdf opens in new tab
Thread.sleep(500);
List<String> tabs = new ArrayList<>(driver.getWindowHandles());
driver.switchTo().window(tabs.get(tabs.size()-1));
String CurrentUrl = driver.getCurrentUrl();// to Fetch new url
ExcelLibrary.writeData("Sheet1", 0, 4, CurrentUrl);//write url to excel sheet?
Ts.switchToPreviousTabAndClose();   //Closing new tab

我不知道如何在您的基础结构中使用driver对象,所以我将其作为常规对象使用,与任何页面对象实例都没有关系。

以下是我为一个测试项目创建的方法(使用cucumber java和selenium java(,该方法与您的方法类似,需要:

  1. 点击网页上的pdf文档链接,该链接在新选项卡中打开
  2. 列出打开的选项卡
  3. 移动到新选项卡
  4. 获取pdf文档的url并验证(断言(它是正确的
  5. 关闭pdf选项卡
  6. 返回网页

随意使用您需要的

@Then("^on "([^"]*)" I can view the Pdf Document of "([^"]*)"$")
public void on_I_can_view_the_Pdf_Document_of(String relativeUrl, String document) throws Throwable {
viewPDFDocument(relativeUrl, document);
}
private void viewPdfDocument(String relativeUrl, String document) throws Exception {
clickOnLink("", document);
verifyPdfUrl();
}
public void clickOnLink(String linkXpath, String label) throws Exception {
LOG.info("Clicking link '{}' with xpath '{}'", label, linkXpath);
retryIfAssertionFails(() -> {
String xpath = linkXpath + "//a/descendant-or-self::*[contains(normalize-space(text()), '" + label + "')]";
waitForElementToBeClickable(xpath);
driver.findElementByXPath(xpath).click();
return null;
});
LOG.info("Link clicked");
sleep(50);
}
private void verifyPdfUrl() throws Exception {
String parentWindowHandle = driver.getWindowHandle();
WebDriverWait wait = new WebDriverWait(driver, 5);
wait.until(ExpectedConditions.numberOfWindowsToBe(2));
for (String windowHandle : driver.getWindowHandles()) {
if (!windowHandle.equals(parentWindowHandle)) {
driver.switchTo().window(windowHandle);
}
}
String pdfTabUrl;
pdfTabUrl = driver.getCurrentUrl();
assertTrue(pdfTabUrl.contains(
"/app/restrict/application/caseInformation.pdf")); {
System.out.println("Correct url presented: " + pdfTabUrl);
}
if (!driver.getWindowHandle().equals(parentWindowHandle)) {
driver.close();
}
driver.switchTo().window(parentWindowHandle);
}

在您的情况下,它正在更新为以下内容:

Lp.ClickonMaterialsButton();
Thread.sleep(3000);
Lp.ClickonPDF1();//By clicking on pdf. Pdf opens in new tab
String parentWindowHandle = driver.getWindowHandle();
WebDriverWait wait = new WebDriverWait(driver, 5);
wait.until(ExpectedConditions.numberOfWindowsToBe(2));
for (String windowHandle : driver.getWindowHandles()) {
if (!windowHandle.equals(parentWindowHandle)) {
driver.switchTo().window(windowHandle);
}
}
String pdfTabUrl;
pdfTabUrl = driver.getCurrentUrl();  // to Fetch new url
ExcelLibrary.writeData("Sheet1", 0, 4, pdfTabUrl);   //write url to excel sheet?
if (!driver.getWindowHandle().equals(parentWindowHandle)) {
driver.close();
}   //Closing new tab
driver.switchTo().window(parentWindowHandle);   //Switch back to original tab  

使用Selenium 4可以很容易地做到这一点

代码

driver.get("https://www.google.com");
driver.switchTo().newWindow(WindowType.TAB);
driver.navigate().to("https://www.stackoverflow.com");
System.out.println(driver.getCurrentUrl());

输出

https://stackoverflow.com/

你可以用你的代码做下面的事情,

Lp.ClickonPDF1();
driver.switchTo().newWindow(WindowType.TAB);
String CurrentUrl = driver.getCurrentUrl();

最新更新