Java 附加到存储在变量中的域
我正在使用SeleniumWebDriver+Java+TestNG(以防这对任何事情都有影响) 我试图做的是获取当前域,将其存储为变量,然后在该变量上附加一些内容并导航到结果URL 这就是我正在尝试的,它获得了域名,但导航失败。说这是一个无效的论点Java 附加到存储在变量中的域,java,selenium,url,append,Java,Selenium,Url,Append,我正在使用SeleniumWebDriver+Java+TestNG(以防这对任何事情都有影响) 我试图做的是获取当前域,将其存储为变量,然后在该变量上附加一些内容并导航到结果URL 这就是我正在尝试的,它获得了域名,但导航失败。说这是一个无效的论点 String CurrentURL = driver.getCurrentUrl(); JavascriptExecutor js = (JavascriptExecutor) driver; String domain = (String) js
String CurrentURL = driver.getCurrentUrl();
JavascriptExecutor js = (JavascriptExecutor) driver;
String domain = (String) js.executeScript("return document.domain");
System.out.println("My Current Domain is: "+domain);
driver.navigate().to(domain+"/lightning/o/Lead/home");
document.domain
不返回http/https,例如,它为此站点返回“stackoverflow.com”
我会用你刚开始的
String CurrentURL = driver.getCurrentUrl();
将该URL转换为,然后使用.getHost()
。您可以将这一切包装到一个方法中,如
public static String getDomainName(String url) throws URISyntaxException {
URI uri = new URI(url);
String domain = uri.getHost();
return domain.startsWith("www.") ? domain.substring(4) : domain;
}
就这样说吧
String domainName = getDomainName(driver.getCurrentUrl());
这是我获得该方法的地方,它列出了关于该方法的注意事项,但听起来它可能适合您。根据以下java文档:
由于您已经通过getCurrentUrl()
提取了当前url,您可以将当前url转换为uri,并提取每个组件,如下所示(使用https://seleniumhq.github.io/selenium/docs/api/java/org/openqa/selenium/package-summary.html
):
- 代码块:
import java.net.URI; import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; import org.openqa.selenium.chrome.ChromeOptions; public class A_demo { public static void main(String[] args) throws URISyntaxException { System.setProperty("webdriver.chrome.driver", "C:\\Utility\\BrowserDrivers\\chromedriver.exe"); ChromeOptions options = new ChromeOptions(); options.addArguments("start-maximized"); WebDriver driver = new ChromeDriver(options); driver.get("https://seleniumhq.github.io/selenium/docs/api/java/org/openqa/selenium/package-summary.html"); String CurrentURL = driver.getCurrentUrl(); URI uri = new URI(CurrentURL); System.out.println("Scheme: "+uri.getScheme()); System.out.println("Scheme-specific-part: "+uri.getSchemeSpecificPart()); System.out.println("Authority: "+uri.getAuthority()); System.out.println("User-info: "+uri.getUserInfo()); System.out.println("Host: "+uri.getHost()); System.out.println("Port: "+uri.getPort()); System.out.println("Path: "+uri.getScheme()); System.out.println("Query: "+uri.getQuery()); System.out.println("Fragment: "+uri.getFragment()); } }
- 控制台输出
Scheme: https Scheme-specific-part: //seleniumhq.github.io/selenium/docs/api/java/org/openqa/selenium/package-summary.html Authority: seleniumhq.github.io User-info: null Host: seleniumhq.github.io Port: -1 Path: https Query: null Fragment: null
https://seleniumhq.github.io/selenium/docs/api/java/org/openqa/selenium/WebDriver.html
您可以执行以下操作:
driver.navigate().to(uri.getScheme()+"://"+uri.getHost()+"/selenium/docs/api/java/org/openqa/selenium/WebDriver.html");
非常感谢。但是,它得到了我需要的域名。我在打印时看到了。问题是我不能让它导航到那个域(并附加到它),我不明白为什么。这是导航部分,我试图让它工作,这对我来说没有意义,为什么它不工作,但再一次,我在学习java的过程中学习goOkay,这是可行的,但它要求我在调用它的函数中加入抛出的URISyntaxException。因为这是一个导航功能,所以它将在每个脚本中被调用。这会导致任何问题吗?“我不习惯用那种东西,因为我是一个相对的新手。”ShelleyCollett是的,你是对的。URI应该抛出URISyntaxException。更新了答案。我在我的框架内使用基本异常进行开发。
Scheme: https
Scheme-specific-part: //seleniumhq.github.io/selenium/docs/api/java/org/openqa/selenium/package-summary.html
Authority: seleniumhq.github.io
User-info: null
Host: seleniumhq.github.io
Port: -1
Path: https
Query: null
Fragment: null
driver.navigate().to(uri.getScheme()+"://"+uri.getHost()+"/selenium/docs/api/java/org/openqa/selenium/WebDriver.html");